/// <summary> /// 使用给定的GameObject创建缓存池 /// </summary> /// <param name="itemName">资源唯一标签,一般使用资源路径</param> /// <param name="itemTemplate">模板GameObject</param> /// <returns></returns> public PoolGroup CreateGroup(string itemName, TemplateType itemType, GameObject itemTemplate) { if (itemTemplate == null) { PoolLogger.Error(PoolUtill.LOG_TAG, "Template is Null"); return(null); } if (!itemGroupDic.TryGetValue(itemName, out PoolGroup itemGroup)) { itemGroup = new PoolGroup(Name, categoryTransform, itemName, itemType, itemTemplate); itemGroupDic.Add(itemName, itemGroup); return(itemGroup); } PoolLogger.Warning(PoolUtill.LOG_TAG, "The pool has been created.uniqueName = " + itemName); return(null); }
/// <summary> /// 回收GameObject /// </summary> /// <param name="item"></param> public void ReleaseItem(GameObject item) { if (item == null) { PoolLogger.Error(PoolUtill.LOG_TAG, "GameObjectPool::ReleaseItem->Item is Null"); return; } if (unusedItemQueue.Count > limitMaxAmount) { UnityObject.Destroy(item); return; } item.transform.SetParent(groupTransform, false); item.SetActive(false); unusedItemQueue.Enqueue(item); if (PoolUtill.IsInDebug) { //从使用列表中删除要回收的对象 for (int i = usedItemList.Count - 1; i >= 0; i--) { if (usedItemList[i].TryGetTarget(out GameObject target) && !target.IsNull()) { if (target != item) { continue; } else { usedItemList.RemoveAt(i); break; } } else { usedItemList.RemoveAt(i); } }