unity 高性能对象池解决方案

对于一个高性能对象池应该有的功能:

支持多种对象、同步加载、异步加载、隐藏方式、自动收缩(使用LRU缓存机制,最近最久未使用来进行收缩)、异步删除

所以我针对这几个功能讲一下原理:

支持多种对象:

GameObject池子和Object池子。也就是申请出来的挂不挂monobehavior。这两个添加删除的方式不同,所以要区分。

同步、异步加载:

同步加载是因为对于小的对象,我拿出来就用,很方便。对于较大的对象,使用异步加载。

但是其实我们常用的就是同步加载,对于短时间大量对象加载,我们会采取分帧操作:设置一个加载队列,每帧从队列取出几个进行加载。

隐藏方式:

对于UI:

unity关于UI隐藏时性能问题-CSDN博客

对于普通游戏对象,这个还没研究过,一般都是disable或者放到9999位置(后续有使用到会更新)

自动收缩:

收缩策略:设置最大容量:防止内存爆炸、设置回收刷新时间:每隔多少秒扫描一次最近最久未使用的池子(LRU),看其是否超过设定的容量,超过则收缩设定的数量个(具体策略根据项目需求而定)。

异步删除:

对于大量对象,我们在同一帧删除多个会导致卡顿(尤其是gameObject),所以我们只需要建一个删除队列,每帧删除一个对象即可。

相关推荐
流浪打工人11 小时前
Unity3d TimeLine中audio track的使用
unity
淡海水14 小时前
02-07-原理篇-GC暂停时间的本质
开发语言·unity·c#·gc·暂停时间
WarPigs14 小时前
UI路径配置SO>字典json工作流
ui·unity
淡海水18 小时前
02-06-原理篇-增量式GC与并发GC
算法·unity·c#·并发·gc·增量
阿松爱学习1 天前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
淡海水1 天前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
Martina_03216 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc
小贺儿开发6 天前
Unity 局域网遥控幻灯片展示工具 3.0
科技·http·unity·工具·ppt·通信·网页
WarPigs8 天前
Unity对象不应该使用null传播的问题
unity
每日出拳老爷子9 天前
【VR】【Unity】抓走转放系列21|一天搭完门和抽屉工具槽:小场景按这个次序拼装
unity·vr·驱动·排错·snap zone