unity 高性能对象池解决方案

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

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

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

支持多种对象:

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

同步、异步加载:

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

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

隐藏方式:

对于UI:

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

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

自动收缩:

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

异步删除:

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

相关推荐
张老师带你学5 小时前
unity TerrainSampleAssets
科技·游戏·unity·游戏引擎·模型
RReality8 小时前
【Unity Shader URP】色带渐变着色(Ramp Shading)实战教程
ui·unity·游戏引擎·图形渲染
mxwin16 小时前
Unity URP 体积光与雾效 基于深度重建世界空间位置,实现体积雾与体积光
unity·游戏引擎
张老师带你学17 小时前
unity 树资源 有樱花树 buildin
科技·游戏·unity·游戏引擎·模型
魔士于安17 小时前
unity 植物 不常见 花 触手植物
游戏·unity·游戏引擎·贴图·模型
魔士于安19 小时前
unity=>传送门特效 带自由视角旋转放大 鼠标操作
前端·游戏·unity·游戏引擎·贴图·模型
南無忘码至尊19 小时前
Unity学习90天 - 第4天 - 认识物理系统基础并实现物体碰撞反弹
学习·unity·游戏引擎
南無忘码至尊19 小时前
Unity学习90天 - 第4天 - 学习预制体 Prefab + 实例化并实现按鼠标生成子弹
学习·unity·游戏引擎
魔士于安1 天前
Unity资源Toon City Pack 发电厂 工地 公园 地铁站口 银行 车 直升飞机 可动 URP
游戏·unity·游戏引擎·贴图·模型
心前阳光1 天前
Unity之运行时标准材质半透明无效果
unity·游戏引擎·材质