Example #1
0
        //maxCount <= 0 不限制大小
        public void InitPool(string poolName, Transform parent, GameObject prefab, int maxCount, int initCount, IGameObjectPoolStrategy strategy = null)
        {
            if (m_Prefab != null)
            {
                Log.e("Already Init GameObjectPool.");
                return;
            }

            if (prefab == null)
            {
                return;
            }

            m_Strategy = strategy;

            if (m_Strategy == null)
            {
                m_Strategy = DefaultPoolStrategy.S;
            }

            m_PoolName = poolName;

            GameObject container = new GameObject(m_PoolName);

            m_Root = container.transform;
            m_Root.SetParent(parent);

            m_Strategy.ProcessContainer(container);

            m_Prefab = prefab;

            //Prefab 自己玩去
            //m_Prefab.transform.SetParent(m_Root, true);

            if (maxCount > 0)
            {
                m_MaxCount = Mathf.Max(1, maxCount);
                initCount  = Mathf.Min(maxCount, initCount);
            }
            else
            {
                m_MaxCount = maxCount;
            }

            if (initCount > 0)
            {
                for (int i = 0; i < initCount; ++i)
                {
                    Recycle(CreateNewGameObject());
                }
            }
        }
Example #2
0
        public void InitPool(string name, GameObject prefab, Transform parentTrans, int maxCount, int initCount, IGameObjectPoolStrategy strategy = null)
        {
            m_CacheStack = new Stack <GameObject>();
            if (m_Prefab != null)
            {
                Log.E("Already exist {" + name + "}Pool.");
                return;
            }
            if (prefab == null)
            {
                return;
            }
            m_PoolName = name;
            m_Prefab   = prefab;
            GameObject container = new GameObject(m_PoolName);
            GameObject go        = GameObject.Instantiate(container);

            m_Root = go.transform;
            if (parentTrans != null)
            {
                m_Root.SetParent(parentTrans);
            }

            m_Strategy = strategy;
            if (m_Strategy == null)
            {
                m_Strategy = DefaultPoolStrategy.S;
            }
            m_Strategy.ProcessContainer(container);
            GameObject.DestroyImmediate(container);
            if (maxCount > 0)
            {
                m_MaxCount = Mathf.Max(1, maxCount);
                initCount  = Mathf.Min(maxCount, initCount);
            }
            if (initCount > 0)
            {
                for (int i = 0; i < initCount; i++)
                {
                    Recycle(CreateNewGameObject());
                }
            }
        }
Example #3
0
        public GameObjectPool CreatePool(string poolName, GameObject prefab, int maxCount, int initCount, IGameObjectPoolStrategy strategy = null)
        {
            GameObjectPool pool = new GameObjectPool();

            pool.InitPool(poolName, transform, prefab, maxCount, initCount, strategy);
            return(pool);
        }
Example #4
0
        public GameObjectPoolGroup CreatePoolGroup(IGameObjectPoolStrategy strategy = null)
        {
            GameObjectPoolGroup group = new GameObjectPoolGroup(transform, strategy);

            return(group);
        }
Example #5
0
 public GameObjectPoolGroup(Transform parent, IGameObjectPoolStrategy strategy = null)
 {
     m_Parent   = parent;
     m_Strategy = strategy;
 }