private void DestroyPoolItem(PoolItemBase poolItem) { if (!poolItem.Disposed) { poolItem.ReleaseResources(); poolItem.Disposed = true; _counters.IncDestroyCount(); } GC.SuppressFinalize(poolItem); }
/// <summary> /// 创建池 /// </summary> /// <param name="item"></param> public void CreateSubPool(PoolItemBase item) { //安全校验 if (poolDict.ContainsKey(item.root.name)) { Debug.LogError(item.root.name + "池已存在,检查是否重名或重复创建"); return; } SubPool subPool = new SubPool(item); poolDict.Add(item.root.name, subPool); }
public GameObject Spawn() { PoolItemBase obj = null; foreach (PoolItemBase item in objList) { if (!item.root.activeSelf) { obj = item; break; } } if (obj == null) { obj = new PoolItemBase(); obj.root = GameObject.Instantiate(prefab); objList.Add(obj); } obj.root.SetActive(true); obj.Spawn(); return(obj.root); }
private void ReturnItemToPool(PoolItemBase poolItem, bool reRegisterForFinalization) { if (poolItem.ShouldReturnToPool()) { if (!poolItem.ResetState()) { _counters.IncResetFailCount(); DestroyPoolItem(poolItem); return; } if (reRegisterForFinalization) { GC.ReRegisterForFinalize(poolItem); } _counters.IncReturnCount(); _resourcePool.Enqueue((T)poolItem); } else { _counters.IncDoNotReturnCount(); DestroyPoolItem(poolItem); } }
public SubPool(PoolItemBase poolItem) { this.prefab = poolItem.root; }