关于缓存池的概念这里不多赘述,不懂的请自行百度(😜)
先说下我的思路,主要分3步(1:预加载,2:拿来用,3:回收不用的)
一 预加载:
就是根据自己的情况预估一下要使用的对象的大致个数,先预加载一些;
二 拿来用:
这里主要有两种情况,一种是缓存池还有剩余,就从里面直接拿出来用,第二种是缓存池所有对象都已经被使用了,这时需要重新预估,加载新的对象来用;
三 回收:
当对象使用完毕,我们不直接销毁对象,而是将它重新放入缓存池,以备下次使用
其他:缓存池清理的一些逻辑
完成后我用子弹发射简单模拟了一下,效果如图:↓
代码如下:
缓存池主逻辑:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PoolManager : MonoBehaviour
{
//单例
static PoolManager _poolMgr = null;
public static PoolManager PoolMgr
{
get
{
if (_poolMgr == null)
{
_poolMgr = new PoolManager();
}
return _poolMgr;
}
}
//缓存表(key,缓存对象列表)
Dictionary<string, List<GameObject>> _poolList = new Dictionary<string, List<GameObject>>();
private void Awake()
{
_poolMgr = this;
}
//根据信息创建一个新的缓存池(key,源,默认创建个数)
public void CreateNewObjList(string key,GameObject obj,