Unity学习日志_对象池简介
核心思想
通过空间换取时间
适用性
- 当需要频繁创建/销毁游戏对象时使用对象池缓存对象。
- 使用反射创建对象。
数据结构
使用字典,Dictionary<string,List>
核心成员
public GameObject CreateObject(参数列表)
{
//代替传统的Instaniate方法来创建游戏对象,在这里我们根据物体是否禁用来判断是否可以重新使用
在池中检查是否存在禁用的物体
{
如果有,返回对象;
如果没有对应类的禁用物体,创建对象;
将新创建的对象加进对象池;
}
//调用使用游戏对象方法
UseObject(参数列表);
return GameObject;
}
//使用游戏对象
private void UseObject(GameObject go, float lifeTime)
{
StartCorotine(ObjectLifeTime(go,lifeTime));
}
//迭代器
private IEnumerator ObjectLifeTime(GameObject go, float lifeTime)
{
yield return new WaitForSeconds(lifeTime);
//游戏对象生命周期结束之后将物体设为禁用
go.SetActive(false);
}
//清空对象池中的某个类,注这里应当释放游戏对象资源而不是逻辑清空
public void Clear(string className)
{
foreach(){
Destroy();
}
}
//清空所有记录,这里使用foreach要注意foreach的只读属性
public void ClearAll()
{
}
注意:执行删除时建议从尾到头删除。