private void _RecycleGameObject(GameObject pooledGameObject, bool setIsInit) { if (pooledGameObject != null) { CPooledGameObjectScript component = pooledGameObject.GetComponent <CPooledGameObjectScript>(); if (component != null) { Queue <CPooledGameObjectScript> queue = null; if (this.m_pooledGameObjectMap.TryGetValue(component.m_prefabKey, out queue)) { queue.Enqueue(component); component.OnRecycle(); component.gameObject.transform.SetParent(this.m_poolRoot.transform, true); component.m_isInit = setIsInit; return; } } UnityEngine.Object.Destroy(pooledGameObject); } }
private GameObject GetGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, out bool isInit) { string key = CFileManager.EraseExtension(prefabFullPath).ToLower(); Queue <CPooledGameObjectScript> queue = null; if (!this.m_pooledGameObjectMap.TryGetValue(key, out queue)) { queue = new Queue <CPooledGameObjectScript>(); this.m_pooledGameObjectMap.Add(key, queue); } CPooledGameObjectScript script = null; while (queue.Count > 0) { script = queue.Dequeue(); if ((script != null) && (script.gameObject != null)) { script.gameObject.transform.SetParent(null, true); script.gameObject.transform.position = pos; script.gameObject.transform.rotation = rot; script.gameObject.transform.localScale = script.m_defaultScale; break; } script = null; } if (script == null) { script = this.CreateGameObject(prefabFullPath, pos, rot, useRotation, resourceType, key); } if (script == null) { isInit = false; return(null); } isInit = script.m_isInit; script.gameObject.SetActive(true); this.HandlePooledMonoBehaviour(script.m_pooledMonoBehaviours, enPooledMonoBehaviourAction.Get); return(script.gameObject); }
private GameObject GetGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, out bool isInit) { string text = CFileManager.EraseExtension(prefabFullPath); Queue <CPooledGameObjectScript> queue = null; if (!this.m_pooledGameObjectMap.TryGetValue(text.JavaHashCodeIgnoreCase(), out queue)) { queue = new Queue <CPooledGameObjectScript>(); this.m_pooledGameObjectMap.Add(text.JavaHashCodeIgnoreCase(), queue); } CPooledGameObjectScript cPooledGameObjectScript = null; while (queue.get_Count() > 0) { cPooledGameObjectScript = queue.Dequeue(); if (cPooledGameObjectScript != null && cPooledGameObjectScript.gameObject != null) { cPooledGameObjectScript.gameObject.transform.SetParent(null, true); cPooledGameObjectScript.gameObject.transform.position = pos; cPooledGameObjectScript.gameObject.transform.rotation = rot; cPooledGameObjectScript.gameObject.transform.localScale = cPooledGameObjectScript.m_defaultScale; break; } cPooledGameObjectScript = null; } if (cPooledGameObjectScript == null) { cPooledGameObjectScript = this.CreateGameObject(prefabFullPath, pos, rot, useRotation, resourceType, text); } if (cPooledGameObjectScript == null) { isInit = false; return(null); } isInit = cPooledGameObjectScript.m_isInit; cPooledGameObjectScript.OnGet(); return(cPooledGameObjectScript.gameObject); }