对象池
2017-03-10 14:22:45 0 举报
AI智能生成
对象池
作者其他创作
大纲/内容
概念
将被使用的对象事先创建好,保存在列表中,供客户端取用,当客户端取得一个对象时,这个对象就已经是按照特定环境初始化好了,马上即可使用的了。当客户端使用完毕,需要将对象归还给“池”,最后在系统生命周期结束时,由“池”统一释放这些对象。
服务端负责数据的处理,和逻辑运算;客户端负责绘制服务端计算过后的图像。
声明
ObjectPoolManager _bulletPool = GameObject.Find("挂载的物体名称").GetComponent<ObjectPoolManager>();
作用
可以减少反复创建和初始化某个对象的系统开销
对象池中元素的共同特性
存在固定生命周期
使用比较频繁
场景中大量使用
对象池的通用结构
初始化对象
获取可用对象
归还对象
放回池中的时候,我们把元素的父节点也设置为池元素,这样做是避免当元素挂载的对象在内存中被删除的时候,元素也被删除的问题
对象池的使用
borrowObject(借出池对象)
returnObject(返回池对象)
使用对象池的注意事项
虽然对象池可以优化对象利用率,但是对象池也不能无限地存储对象,这样对于内存占用也是急剧增加,应该通过限制池子上限,并通过统计获取使用频率较低的对象并剔除,从而动态地收缩对象池。
对于重复使用的对象,在对象池中应该处理好对象重置(reset)的操作
假如在多个线程中同时访问统一对象池,要处理好线程安全的问题
优化
使用二分法将池分为,非活动池和活动池
给池分类,分成不同类型的池,减少无用的遍历
游戏(可以有多个对象池)
PoolManager
字典
Key(对象池名字)
Value(对象池对象)
大量同质元素
对象池(KeyPool)
池对象(KeyCount)
对象池
名字
上限
数组
池对象预制
GetObject()
找一个可用对象
找到
return GameObject
没找到
判断是否到上限
达到上限
return null
没达到上限
克隆
Add()
return GameObject
HideAll()
将对象池中所有元素封装起来
HideOne()
将一个元素封装起来
GameManger
GameManager
(控制)
PoolManager
Pool1
Pool2
PollObject1
PollObject2
PollObject3
Pool3
0 条评论
下一页