在Unity中,通过代码实例化对象后,在内存中分配空间,当删除时,虽然对象不在了,但是其实它在内存中并没有立即释放,直到内存分配满了,再把没有引用的内存空间释放掉,即GC,这是有很大消耗的,可能会造成明显的卡顿,因此就需要缓存池了。缓存池的作用就是实例化的物体使用完后,不将其删除,而是放在一个内存空间(缓存池)中,下次要用的时候通过索引在缓存池中直接获取,即【复用】。
而缓存池中有进行分类(通过Dictionary),来存储不同类型的数据,例如特效、音效、贴图等GameObject对象。
// 缓存池模块
// 1、Dictionary, List
// 2、GameObject 和 Resources两个公共类的API
// 假设该缓存池是以对象名(key)分类,存储的是一个该对象的列表
public class PoolMgr : BaseManager<PoolMgr> {
public Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>();
// 从缓存池中取
public GameObject GetObj(string key) {
GameObject obj = null;
if ( pool.ContainsKey(key) & pool[key].Count > 0 ) {
obj = pool[key][0]; // 假设默认总是取第一个
pool[key].RemoveAt(0);
} else {
obj = GameObject.Instantiate(Resources.Load<GameObject>(key));
obj.name = key;
}
obj.SetActive(true);