using System.Collections; using System.Collections.Generic; using UnityEngine; namespace XFramework.Objects { /// /// 单个对象池 /// public class SingleObjPool where T:Object { /// /// 已经使用过的对象 /// private Dictionary> useDict; /// /// 没有使用过的对象列表 /// private List> unUseList; /// /// 该对象池存储的原始对象 /// 之后的对象都是其克隆体 /// private T original; /// /// 单个对象池 /// /// 原始对象 public SingleObjPool(T __original) { original = __original; useDict = new Dictionary>(); unUseList = new List>(); } /// /// 创建对象容器 和所需对象 /// /// private ObjectContainer CreateObjContainer() { ObjectContainer container = new ObjectContainer(); container.Item = Object.Instantiate(original); unUseList.Add(container); return container; } /// /// 从对象池里获取一个对象 /// /// public T Get() { ObjectContainer container; if (unUseList.Count == 0) { //Debug.Log("chuangjianxinwuti"); container = CreateObjContainer(); } else { container = unUseList[0]; } container.Consume(); unUseList.Remove(container); useDict.Add(container.Item, container); return container.Item; } /// /// 释放对象 /// /// 要释放的对象 /// 释放成功返回true public bool Release(T item) { if (useDict.ContainsKey(item)) { ObjectContainer container = useDict[item]; unUseList.Add(container); useDict.Remove(item); container.Release(); return true; } else Debug.Log($"名为{item.name}的对象可能已经被回收"); return false; } } }