unity微信小游戏wasm代码分析
Addressables优化catalog文件
unity使用Addressables进行资源管理很方便但是有一个很值得诟病的问题, 那就是catalog文件过大, 对于一个持续运营的项目来说catalog文件可能超过10M, 导致初始化Addressables时间较长, 峰值内存上涨明显.
本文通过分析catalog文件中主要的内容占用和内存开销, 提出一些可行的(已实践)方案.
一. catalog相关的开销分析
catalog 开销主要来自两个部分:
- 初始化
Addressables的时间开销, 使用Addressables需要确保catalog加载完成, 对于部分网络情况不佳的用户造成卡顿较长的体验; - 加载
catalog文件的内存开销, 使用json格式的Addressables加载时会产生两倍于自身大小的内存开销.
加载catalog的时间开销和网络情况密切相关, 实际测试下来一个1M的catalog文件经过传输和加载到内存, 整体时间超过1s. 主要的开销来源是文件的大小.
内存上的开销主要是加载文本本身和反序列化数据之后的结果上的内存开销.
unity拓展编辑器
// TODO
spine优化
项目背景
项目使用unity做游戏,并使用addressables方案管理资源,基于spine作为很多unity的骨骼动画实现方案,在我们的项目中有一些不合理的地方:
- 使用
ScriptableObject作为桥接SkeletonData和Unity的方案,导致skel文件在加载完成之后不会卸载,这导致Spine动画很多的情况下会导致很多的Native资源占用; Spine动画使用的地方很多,但是大部分时候只会播放一个动画;
为此我们实现了两个Spine方案上的改动:
- SkeletonData加载完成之后手动卸载
skel.bytes文件; - 按照动画名字拆分
Spine文件中的动画,按需加载Spine动画文件;