public void DisposeTransform(Transform transform, bool forceDestroy) { IzPoolObject izPoolObject = transform.GetComponent <PoolObject>(); if (izPoolObject != null) { if (forceDestroy)//强制清除,从字典中去掉,并且destroy { RemoveFromSpawnedDic(izPoolObject); RemoveFromDespawnedDic(izPoolObject); UnityEngine.Object.Destroy(transform.gameObject); //UnityEngine.Object.DestroyImmediate(transform.gameObject); } else { AddToDespawnedDic(izPoolObject); RemoveFromSpawnedDic(izPoolObject); } } else { Debug.LogFormat(">>>>该obj {0} 尚未没存到对象池中,无法回收,并将直接删除! ", transform.name); UnityEngine.Object.Destroy(transform.gameObject); //UnityEngine.Object.DestroyImmediate(transform.gameObject); } }
public Transform GetTransform(string strPathName) { Transform transform = null; List <Transform> list = null; if (this._dicDespawned.TryGetValue(strPathName, out list) && list.Count > 0) { transform = list[0]; } if (transform == null) { transform = this._izPoolManager.GetPoolFactory().CreatePrefab(strPathName); } if (null == transform) { return(null); } IzPoolObject izPoolObject = transform.GetComponent <PoolObject>(); if (izPoolObject == null) { izPoolObject = transform.gameObject.AddComponent <PoolObject>(); } izPoolObject.SetPoolName(this._strPoolName); izPoolObject.SetPathName(strPathName); AddToSpawnedDic(izPoolObject); RemoveFromDespawnedDic(izPoolObject); return(transform); }
private void RemoveFromSpawnedDic(IzPoolObject izPoolObject) { if (izPoolObject != null && this._strPoolName == izPoolObject.GetPoolName()) { string strPathName = izPoolObject.GetPathName(); List <Transform> list = null; if (this._dicSpawned.TryGetValue(strPathName, out list) && list != null) { list.Remove(izPoolObject.GetTransform()); this._dicSpawned[strPathName] = list; } } }
public void DisposeTransform(Transform transform, bool forceDestroy) { IzPoolObject izPoolObject = transform.GetComponent <PoolObject>(); //TODO Denes 这里可以尝试优化 IzSpawnPool izSpawnPool = null; if (izPoolObject != null && this._dicSpawnPool.TryGetValue(izPoolObject.GetPoolName(), out izSpawnPool) && izSpawnPool != null) { izSpawnPool.DisposeTransform(transform, forceDestroy); } else { UnityEngine.Object.Destroy(transform.gameObject);//不在池里的对象,直接destroy } }
private void AddToSpawnedDic(IzPoolObject izPoolObject) { if (izPoolObject != null && this._strPoolName == izPoolObject.GetPoolName()) { string strPathName = izPoolObject.GetPathName(); List <Transform> list = null; if (!this._dicSpawned.TryGetValue(strPathName, out list) || list == null) { list = new List <Transform>(); } list.Add(izPoolObject.GetTransform()); this._dicSpawned[strPathName] = list; } }