示例#1
0
        public void CreatePool(GameObject lPrefab, int lPoolSize, bool lReverseOrder)
        {
            int lKey = lPrefab.gameObject.GetInstanceID();

            if (m_Dictionary.ContainsKey(lKey))
            {
                return;
            }

            if (m_PrefabIDs == null)
            {
                m_PrefabIDs = new List <int>(64);
            }

            m_PrefabIDs.Add(lKey);

            GameObject lPoolHolder = new GameObject(lPrefab.name + " Pool");

            lPoolHolder.transform.parent = transform;
            lPoolHolder.isStatic         = true;

            PoolInfo lInfo = new PoolInfo();

            lInfo.PoolHolder = lPoolHolder;
            lInfo.PoolSize   = lPoolSize;

            m_Dictionary.Add(lKey, new Queue <ObjectInstance>());
            m_Infos.Add(lKey, lInfo);

            if (lReverseOrder)
            {
                for (int i = lPoolSize - 1; i >= 0; i--)
                {
                    GameObject lObject = Instantiate(lPrefab);
                    lObject.isStatic = true;

                    lObject.transform.parent = lPoolHolder.transform;

                    ObjectInstance lInstance = new ObjectInstance(lObject);

                    m_Dictionary[lKey].Enqueue(lInstance);
                }
            }
            else
            {
                for (int i = 0; i < lPoolSize; i++)
                {
                    GameObject lObject = Instantiate(lPrefab);
                    lObject.isStatic = true;

                    lObject.transform.parent = lPoolHolder.transform;

                    ObjectInstance lInstance = new ObjectInstance(lObject);

                    m_Dictionary[lKey].Enqueue(lInstance);
                }
            }
        }
示例#2
0
        private void ReparentAndDisactivatePool(int lPrefabID)
        {
            int lKey = lPrefabID;

            if (m_Dictionary.ContainsKey(lKey))
            {
                Queue <ObjectInstance> lQueue = m_Dictionary[lKey];
                PoolInfo lInfo = m_Infos[lKey];

                for (int i = 0; i < lQueue.Count; i++)
                {
                    ObjectInstance lObjectInstance = lQueue.Dequeue();

                    lObjectInstance.Object.transform.parent = lInfo.PoolHolder.transform;
                    lObjectInstance.Object.SetActive(false);

                    lQueue.Enqueue(lObjectInstance);
                }
            }
        }