static public void Initialize()
        {
            Debug.Log("Initialize ObjectPoolManager");
            _initialized = true;
            GameObject core = new GameObject();

            core.name      = "ObjectPoolManager";
            core.hideFlags = HideFlags.HideAndDontSave;
            _instance      = core.AddComponent <ObjectPoolManager>();
            GameObject.DontDestroyOnLoad(core);

            _pools = new Dictionary <string, ObjectPool>();
        }
        public ObjectPool(ObjectPoolManager p_manager, int p_initialSize, GameObject p_objectPrototype, bool p_dontDestroyOnLoad)
        {
            if (p_objectPrototype == null)
            {
                throw new System.Exception("Cannot use null as pool prototype.");
            }

            _manager          = p_manager;
            _initialSize      = p_initialSize;
            objectPrototype   = p_objectPrototype;
            dontDestroyOnLoad = p_dontDestroyOnLoad;

            _freeStack = new Stack <GameObject>();
            _usedPool  = new List <GameObject>();

            for (int i = 0; i < _initialSize; ++i)
            {
                CreateInstance();
            }
        }