# 【对象池】
对象池可以减少对象频繁创建导致的性能问题,简单来说就是对象复用。
经典使用情景:
- 飞机弹幕。
- 列表项。
- 地图砖块。
using UnityEngine.Pool;
ObjectPool<GameObject> pool;
/// <summary>
/// 创建新对象时调用
/// </summary>
public GameObject CreateFunc()
{
GameObject gameObject = Instantiate(XXX);
return gameObject;
}
/// <summary>
/// 从对象池取出时调用
/// </summary>
public void ActionOnGet(GameObject gameObject)
{
gameObject.SetActive(true);
}
/// <summary>
/// 回到对象池时调用
/// </summary>
public void ActionOnRelease(GameObject gameObject)
{
gameObject.SetActive(false);
}
/// <summary>
/// 池溢出无法容纳对象时,对对象进行销毁
/// </summary>
public void ActionOnDestroy(GameObject gameObject)
{
Destroy(gameObject);
}
private void CreatePool()
{
// 回收时是否进行检查池里是否已经有这个对象
// 设置成false可以获得更好性能,但要保证使用时确保对象的在池状态
bool collectionCheck = true;
// 初始池里的容量,通常设置成业务里对象最大数量,避免不断扩充池大小导致的性能开销。
int defaultCapacity = 10;
// 最大的池容量,超出后不回收保存,进行销毁处理
int maxSize = 10000;
pool = new ObjectPool<GameObject>(
CreateFunc,ActionOnGet,ActionOnRelease,ActionOnDestroy,
collectionCheck,defaultCapacity,maxSize);
}