Skip to content

Latest commit

 

History

History
66 lines (39 loc) · 1.62 KB

对象池.md

File metadata and controls

66 lines (39 loc) · 1.62 KB

对象池

脚本类型

游戏优化(资源回收和加载/实例化消耗性能造成的游戏卡顿)

实质 一定数量的已经创建好对象(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);
     															//设置父物体
 }
}
用字典
水位线

检查对象池中可用对象的数量。

Lease/Return速度

速度

精度更高的对象分配