脚本类型
游戏优化(资源回收和加载/实例化消耗性能造成的游戏卡顿)
实质 一定数量的已经创建好对象(Object)的集合。初始化一组可重用的实体存放在对象池里,需要创建对象时从中获取提供给调用者,如果没有符合条件的再进行创建。对象不需要时,将其setActive(false),存入池子中。
一种设计方法
让对象池自己判断是否存在资源,如果没有则创建,如果有则直接拿出来给它。
缺点 某次对象请求会因为执行对象分配而中断。
public class ObjectPool:MonoBehaviour{
[SerializeField]private GameObject _prefab;
private Queue<GameObject>_pooledInstanceQueue = new Queue<GameObject>;
public GameObject G etInstance() //出池:若队列中有资源,最后一个出列
{
if(_pooledInstanceQueue.Count>0)
{
GameObject instanceToReuse = _pooledInstanceQueue.Dequeue();
instanceToReuse.SetActive(true);
return instanceToReuse;
}
return Instantiate(_prefab);
}
public void ReturnInstance(GameObject gameObjectToPool) //返回对象函数,资源入池
{
_pooledInstanceQueue.Enqueue(gameObjectToPool);
gameObjectToPool.SetActive(false);
gameObjectToPool.transform.SetParent(gameObject.transform);
//设置父物体
}
}
检查对象池中可用对象的数量。
速度
精度更高的对象分配