Skip to content

性能优化总览

为何需要进行性能优化?

Unity WebGL导出形式相对于原生APP应用,需要开发者更关注性能与体验调优。有以下几点原因:

  • 小游戏天生为"即开即用",在小游戏生态下玩家对启动耗时更敏感。
  • Unity WebGL底层基于WebAssembly,算力不及原生APP。
  • Unity并未对WebGL平台做特别裁剪,启动较慢。

因此,相对于原生APP,无论从启动还是运行上我们都需要做进一步性能优化。

优化措施

1 推荐Unity版本

支持unity 2019及以上,但强烈建议使用unity 2021及以上版本,支持wasm函数缩减及资源纹理ASTC压缩模式。

2 定制启动封面

由于Unity WebGL启动加载需要一定时间,因此需要使用视频或图片等内容作为过渡以留住玩家。

为此平台提供了可定制启动封面方案

3 加快游戏启动速度

相比常规小游戏,unity游戏包体较大。小游戏启动速度主要影响之一就是包体资源大小,为获得更好的游戏体验,需要对包体资源本身做一些的限制和优化,为此平台也给出的包体限制及优化建议;

对于包体较大的小游戏,平台插件提供了首包资源按需加载 配置选项,开发者需根据自身情况选择合适的首包资资源加载方式;

更多优化手段请阅读:

4 WASM代码下载和编译

WASM的大小会直接影响代码下载时长以及程序初始化编译的时间,关于WASM代码对启动速度的影响,开发者需要注意:

转换工具会将Unity WebGL包自动进行zip压缩(压缩至原code包的22%);

WASM代码下载与首包资源并行下载,因此占用下载带宽;

WASM编译需要CPU资源,对于低端机来说时间依然可观;

建议原始代码包(webgl/Build目录下的code文件)不超过30MB,为此编译时建议按以下要求进行优化:

  • 开发者勾选 "Strip Engine Code"并设置"Managed Stripping Level"为High
  • 如果使用Unity2021以上版本,可更改PlayerSettings面板IL2CPP选项为 "Faster (Smaller) Builds" 以减少函数量;
  • 同时,强烈建议开发者使用 代码(wasm)分包工具 将代码首包减少到原始尺寸的到1/3。

具体选项勾选参考下图: alt text

5 资源按需加载

区别于原生APP游戏通常安装与启动时将资源都下载完成,小游戏需要做到“即点即玩”,启动仅能加载少量资源,其余部分都必须放CDN进行延迟加载,如何合理与高效地进行资源按需加载是非常重要的事情。

前面我们提到开发者需要将资源从首包分离以较少首屏加载时间,同理,而对于其余的资源开发者最好使用按需加载的方式进行加载,减少玩家进行核心玩法的等待时间,优化可参考Unity的 AA包、AB包方案。

AA/AB 包是常规的分包解决方案,关于他们的选择对于轻度游戏来说两者没有特别要求,倒是功能强大的 AA包 使用门槛更低一些,而对于重度游戏,平台目前所反馈到的结论是使用 AB包 的性能要比 AA包 更好,AA包较大项目时生成的未压缩的 catalog 较大,加载效率低,改用 AB包后,效果提升明显。

更多信息请阅读:

6 资源处理建议

1 贴图maxsize尽量不超过1024,小游戏环境适当降低画质

2 贴图尽量不生成Mipmap

3 贴图尽量不使用可写属性

4 字体文件压缩前最大不超过4MB

更多信息请阅读:

7 优化Unity游戏IndexedDB的适配逻辑

Unity游戏自有的API 如 PlayerPrefs的使用在导出WebGl时,会存储在浏览器的IndexedDB中,在小游戏环境中并无此功能,之前的脚手架版本(cli1.5.2-alpha.0及以下)适配的逻辑过于消耗性能,新版脚手架及C# SDK解决了此适配场景,C# SDK提供了一套PlayerPrefs实现,可无需修改代码进行适配 。

8 性能调优