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); } } }
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); } } }