public void ExecuteClearPooledObjects() { for (LinkedListNode <GameObjectPool.stDelayRecycle> linkedListNode = m_delayRecycle.First; linkedListNode != null; linkedListNode = linkedListNode.Next) { if (null != linkedListNode.Value.recycleObj) { RecycleGameObject(linkedListNode.Value.recycleObj); } } m_delayRecycle.Clear(); m_componentMap.Clear(); Dictionary <int, Queue <PooledGameObjectScript> > .Enumerator enumerator = m_pooledGameObjectMap.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair <int, Queue <PooledGameObjectScript> > current = enumerator.Current; Queue <PooledGameObjectScript> value = current.Value; while (value.Count > 0) { PooledGameObjectScript cPooledGameObjectScript = value.Dequeue(); if (cPooledGameObjectScript != null && cPooledGameObjectScript.gameObject != null) { UnityEngine.Object.Destroy(cPooledGameObjectScript.gameObject); } } } m_pooledGameObjectMap.Clear(); }
private PooledGameObjectScript CreateGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, string prefabKey) { bool needCached = false;// resourceType == enResourceType.BattleScene; GameObject gameObject = Singleton <ResourceManager> .GetInstance().GetResource(prefabFullPath, typeof(GameObject), resourceType, needCached, false).content as GameObject; if (gameObject == null) { return(null); } GameObject gameObject2; if (useRotation) { gameObject2 = (UnityEngine.GameObject.Instantiate(gameObject, pos, rot) as GameObject); } else { gameObject2 = (UnityEngine.GameObject.Instantiate(gameObject) as GameObject); gameObject2.transform.position = pos; } // DebugHelper.Assert(gameObject2 != null); PooledGameObjectScript pooledGameObjectScript = gameObject2.GetComponent <PooledGameObjectScript>(); if (pooledGameObjectScript == null) { pooledGameObjectScript = gameObject2.AddComponent <PooledGameObjectScript>(); } pooledGameObjectScript.Initialize(prefabKey); pooledGameObjectScript.OnCreate(); return(pooledGameObjectScript); }
public void PrepareGameObject(string prefabFullPath, enResourceType resourceType, int amount, bool assertNull = true) { string text = FileManager.EraseExtension(prefabFullPath); Queue <PooledGameObjectScript> queue = null; if (!m_pooledGameObjectMap.TryGetValue(text.JavaHashCodeIgnoreCase(), out queue)) { queue = new Queue <PooledGameObjectScript>(); m_pooledGameObjectMap.Add(text.JavaHashCodeIgnoreCase(), queue); } if (queue.Count >= amount) { return; } amount -= queue.Count; for (int i = 0; i < amount; i++) { PooledGameObjectScript pooledGameObjectScript = CreateGameObject(prefabFullPath, Vector3.zero, Quaternion.identity, false, resourceType, text); if (assertNull) { //DebugHelper.Assert(cPooledGameObjectScript != null, "Failed Create Game object from \"{0}\"", new object[] //{ // prefabFullPath //}); } if (pooledGameObjectScript != null) { queue.Enqueue(pooledGameObjectScript); pooledGameObjectScript.gameObject.transform.SetParent(m_poolRoot.transform, true); pooledGameObjectScript.OnPrepare(); } } }
private void RecycleGameObject(GameObject pooledGameObject, bool setIsInit) { if (pooledGameObject == null) { return; } PooledGameObjectScript component = pooledGameObject.GetComponent <PooledGameObjectScript>(); if (component != null) { Queue <PooledGameObjectScript> queue = null; if (this.m_pooledGameObjectMap.TryGetValue(component.prefabKey.JavaHashCodeIgnoreCase(), out queue)) { queue.Enqueue(component); component.OnRecycle(); component.transform.SetParent(this.m_poolRoot.transform, true); component.isInit = setIsInit; return; } } UnityEngine.Object.Destroy(pooledGameObject); }
private GameObject GetGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, out bool isInit) { string text = FileManager.EraseExtension(prefabFullPath); Queue <PooledGameObjectScript> queue = null; if (!m_pooledGameObjectMap.TryGetValue(text.JavaHashCodeIgnoreCase(), out queue)) { queue = new Queue <PooledGameObjectScript>(); m_pooledGameObjectMap.Add(text.JavaHashCodeIgnoreCase(), queue); } PooledGameObjectScript pooledGameObjectScript = null; while (queue.Count > 0) { pooledGameObjectScript = queue.Dequeue(); if (pooledGameObjectScript != null && pooledGameObjectScript.gameObject != null) { pooledGameObjectScript.gameObject.transform.SetParent(null, true); pooledGameObjectScript.gameObject.transform.position = pos; pooledGameObjectScript.gameObject.transform.rotation = rot; pooledGameObjectScript.gameObject.transform.localScale = pooledGameObjectScript.defaultScale; break; } pooledGameObjectScript = null; } if (pooledGameObjectScript == null) { pooledGameObjectScript = CreateGameObject(prefabFullPath, pos, rot, useRotation, resourceType, text); } if (pooledGameObjectScript == null) { isInit = false; return(null); } isInit = pooledGameObjectScript.isInit; pooledGameObjectScript.OnGet(); return(pooledGameObjectScript.gameObject); }