public void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false, EPoolItemRemoveMethod removeMethod = EPoolItemRemoveMethod.OnDisEnable) { if (item == null) { return; } if (item.owner != null) { CSObjectPoolBase pool = item.owner; if (pool != null) { pool.RemovePoolItem(item, isDestroyResImmi); } else { GameObject.Destroy(item.go); item.go = null; } } else { if (item.go != null) { GameObject.Destroy(item.go); item.go = null; } } }
public override void AddPoolItem(CSObjectPoolItem item) { refCount++; item.isUse = true; mList.Remove(item); mList.Add(item);//isUse = true:插入到最后 }
protected override void DestroyPoolItem(CSObjectPoolItem item) { if (item == null) { return; } if (item.isUse) { return; //正在使用的话,不进行删除 } if (item.go != null) { Destroy(item.go); } item.go = null; mList.Remove(item); if (mList.size == 0) { bool isDestroy = mMgr.DestroyPool(poolName); if (!isDestroy) { mLastNotUseTime = mLastNotUseTime + 10 > Time.time ? Time.time : mLastNotUseTime + 10; mList.Add(item); } } }
public override void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false) { if (mList.Contains(item)) { refCount--; refCount = Mathf.Max(refCount, 0); item.isUse = false; mList.Remove(item); mList.Insert(0, item);//isUse false:未使用的放到最前面 if (refCount == 0) { if (item.go != null) { item.go.SetActive(false); } if (!isDestroyResImmi) { mLastNotUseTime = Time.time; } else { mLastNotUseTime = 0; } } } }
protected override void DestroyPoolItem(CSObjectPoolItem item) { if (item == null) { return; } if (item.isUse) { return;//正在使用的话,不进行删除 } if (CSObjectPoolMgr.Instance == null) { return; } if (item.go != null) { Destroy(item.go); } item.go = null; mList.Remove(item); if (mList.size == 0) { bool isDestroy = CSObjectPoolMgr.Instance.DestroyPool(poolName); if (!isDestroy) { //mLastNotUseTime = mLastNotUseTime+1;//防止不能被删除的资源没有引用时Update中不停调用。但是释放的时候同一帧会进行等待,确认下代码 mList.Add(item); } } }
public CSObjectPoolItem GetAndAddPoolItem_Class_ProjectOverride(string poolNameShow, string poolName, GameObject go, Type type, params object[] args) { CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, EPoolType.Normal, 1000, true); CSObjectPoolBase pool = mDic[poolName]; poolItem.go = go; pool.AddPoolItem(poolItem); return(poolItem); }
/// <summary> /// 设置放入对象池的时间 /// </summary> /// <param name="mPoolItem"></param> /// <param name="time">秒</param> public void SetPoolRemoveTime(CSObjectPoolItem mPoolItem, float time, EPoolItemRemoveMethod removeMethod = EPoolItemRemoveMethod.OnDisEnable) { if (mPoolItem == null) { return; } mPoolItem.RemoveTime = Time.time + time; WaitRemoveList.Add(mPoolItem); }
void RemovePoolItem() { if (CSObjectPoolMgr.Instance != null) { CSObjectPoolMgr.Instance.RemovePoolItem(poolItem); poolItem = null; mAtlas = null; } }
public override void AddPoolItem(CSObjectPoolItem item) { refCount++; item.isUse = true; //mList.Remove(item); if (!mList.Contains(item)) { mList.Add(item);//isUse = true:插入到最后 } }
private CSObjectPoolItem AddPool(string resPath) { CSResource resource = CSResourceManager.Instance.GetLoadedRes(resPath); if (resource == null) { return(null); } CSObjectPoolItem item = resource.GetPoolItem(EPoolType.Normal); return(item); }
private void TryCreateBody() { Model3DComponentLoadData data = GetWaitModelComponent(EModelStructure.Body) as Model3DComponentLoadData; if (data != null) { RemoveWaitModelComponent(EModelStructure.Body); CSObjectPoolItem body = AddPool(data.ResPath); if (body != null && body.go != null) { } } }
public override void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false) { int index = -1; if (mList.Contains(item, ref index)) { refCount--; refCount = Mathf.Max(refCount, 0); item.isUse = false; if (item.go != null) { if (item.owner == null || item.owner.transform == null) { //item.go.SetActive(false); GameObject.Destroy(item.go); item.go = null; } else if (item.owner.RemoveMethod == EPoolItemRemoveMethod.OnDisEnable) { item.go.SetActive(false); item.go.transform.parent = item.owner.transform; } else if (item.owner.RemoveMethod == EPoolItemRemoveMethod.RemoveVision) { item.go.transform.localPosition = Vector3.zero; } } mList.MoveToFront(index); //mList.Remove(item); //mList.Insert(0, item);//isUse false:未使用的放到最前面 if (refCount == 0) { if (!isDestroyResImmi) { mLastNotUseTime = Time.time; } else { mLastNotUseTime = -releaseTime; } } } else { if (item != null) { GameObject.Destroy(item.go); item.go = null; } } }
/// <summary> /// /// </summary> /// <param name="poolNameShow"></param> /// <param name="poolName"></param> /// <param name="go">例如CSAvater,如果不使用了,需要将go(CSAvater。GO)隐藏掉,不然场景上面会有残留</param> /// <param name="poolType"></param> /// <param name="poolNum"></param> /// <param name="isForever"></param> /// <returns></returns> CSObjectPoolItem GetAndAddPoolItem(string poolNameShow, string poolName, GameObject go, EPoolType poolType, int poolNum, bool isForever, Type type, params object[] args) { CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, poolType, poolNum, isForever); CSObjectPoolBase pool = mDic[poolName]; poolItem.go = go; if (poolItem.objParam == null && type != null) { poolItem.objParam = Activator.CreateInstance(type, args); } pool.AddPoolItem(poolItem); return(poolItem); }
public CSObjectPoolItem GetAndAddPoolItem_GameObject(string poolNameShow, string poolName, GameObject origin, bool isForever = false, EPoolType type = EPoolType.Normal, bool IsClone = true) { CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, type, 1000, isForever); CSObjectPoolBase pool = mDic[poolName]; pool.AddPoolItem(poolItem); if (poolItem.go == null && IsClone) { poolItem.go = GameObject.Instantiate(origin) as GameObject; } return(poolItem); }
public override CSObjectPoolItem GetGOFromPool() { CSObjectPoolItem item = null; if (mList.size > 0) { item = mList[0]; } else { item = new CSObjectPoolItem(); item.owner = this; } return(item); }
public override CSObjectPoolItem GetGOFromPool() { CSObjectPoolItem item = null; if (mList.size > 0 && !mList[0].isUse)//如果正在使用,新建Item,外部去克隆 { item = mList[0]; } else { item = new CSObjectPoolItem(); item.owner = this; } return(item); }
public void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false) { if (item == null) { return; } if (item.owner != null) { CSObjectPoolBase pool = item.owner; if (pool != null) { pool.RemovePoolItem(item, isDestroyResImmi); } } }
public override void AddPoolItem(CSObjectPoolItem item) { if (refCount == 0 && item.go != null) { item.go.SetActive(true); } if (!mList.Contains(item)) { refCount++; item.isUse = true; mList.Remove(item); mList.Add(item);//isUse = true:插入到最后 } else//Atlas如果存在,外部调用AddPoolItem只是添加一个引用计数 { refCount++; item.isUse = true; } }
/// <summary> /// 得到Avater的对象缓存池 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="type"></param> /// <returns></returns> protected CSAvater GetPoolItem <T>(Type type) where T : CSAvater, new () { if (CSObjectPoolMgr.Instance == null) { return(null); } CSAvater avater = null; string s = type.ToString(); CSObjectPoolItem poolItem = CSObjectPoolMgr.Instance.GetAndAddPoolItem_Class_ProjectOverride(s, s, null, type, null); if (poolItem.objParam == null && type != null) { poolItem.objParam = CSAvater.Create <T>(); } avater = poolItem.objParam as CSAvater; avater.InitCreate(); avater.PoolItem = poolItem; return(avater); }
protected override void DestroyPoolItem(CSObjectPoolItem item) { if (item == null) { return; } if (item.isUse) { return; //正在使用的话,不进行删除 } if (item.go != null) { Destroy(item.go); } item.go = null; mList.Remove(item); if (mList.size == 0) { mMgr.DestroyPool(poolName); } }
public virtual void ForceUpdateList(CSObjectPoolItem item) { }
public virtual void AddPoolItem(CSObjectPoolItem item) { }
protected virtual void DestroyPoolItem(CSObjectPoolItem item) { }
public virtual void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false) { }
public override void ForceUpdateList(CSObjectPoolItem item) { mList.Remove(item); mList.Add(item);//isUse = true:插入到最后 }