抖音开放平台Logo
开发者文档
控制台

提升Unity WebGL游戏启动速度

收藏
我的收藏
此文档描述如何提升webgl游戏启动速度

为什么要做启动优化

小游戏与手游APP的启动差异

抖音小游戏具有“即开即用“的特性,玩家在下载时只能被动等待,对于启动时长更为敏感,过长的启动时间将导致用户显著流失。导致分发效率变低。

优化的目标与标准

目前普通小游戏普遍启动时间为5~6s,而如果不经优化的Unity WebGL游戏启动时间在20s以上。建议开发者将启动优化作为上线前最重要的事项。经过优化的可以达到10s。

分析小游戏启动速度

查看启动耗时

游戏在测试环境中进入时,会弹窗显示游戏启动阶段耗时
要知道各个阶段的含义,我们必要理解启动流程
小游戏启动主要由三部分影响:
    1.首包资源下载
    2.wasm代码下载和编译
    3.引擎初始化与开发者首帧逻辑
建议首屏启动时间控制在5~10s甚至更短

分阶段耗时

首资源包下载与体积

首包资源主要有以下组成:
    代码部分
    wasm代码:C#代码使用il2cpp生成cpp代码生成的类,方法等信息,再转成wasm代码
    wasm分包:如果使用了wasm分包,则会包含子包内容(仅Android,iOS通过其他方式下载)
    wasm胶水代码
    资源部分
    unity default resources文件,引擎默认资源,如Arial字体,默认mesh,纹理等
    unity_builtin_extra
    Always-included Shaders
    BuildSettings中所有active的场景
    Resources文件夹中的资源,以及其中的资源引用到的其他资源
    全局设置及引用到的资源,如splash图片等
    其他配置
    Unity小游戏配置文件
    StreamingAssets中部分文件
下列首包资源中webgl开头的文件会通过brotli压缩格式进行压缩:
当首资源包发生变化时,小游戏在启动阶段会重新下载新资源,因此文件大小极为影响游戏的启动速度。
    1.网络条件绝大部分为wifi或4G
    2.玩家平均下载速度约2MB/s
    3.用户存在不少<300KB/s的低网速玩家
    4.中文显示需要自定义字体,打包在首资源包或Bundle。请尽量使用2~3MB以内的精简字体以免影响游戏启动速度

wasm代码编译

wasm分包的大小会直接影响代码下载时长以及程序初始化编译的时间,关于wasm代码对启动速度的影响,开发者需要注意:
    1.转换工具会将Unity WebGL包自动进行br压缩(压缩至原code包的20%)
    2.wasm代码下载会随首包资源一起下载
    3.wasm编译需要CPU资源,对于低端机来说编译时间会较长
关于代码包的建议如下:
    1.生成的原始代码不超过30MB(Build/webgl_package目录下code.unitywebl文件)
    2.勾选Strip Engine Code并设置Managed Stripping LevelHigh
    3.使用代码分包工具,减少wasm首包大小,会大大降低编译时间
    4.如果使用Unity2021以上版本,可更改PlayerSettings面板IL2CPP选项为更小尺寸(SIZE)以减少函数量。

引擎初始化与开发者首帧逻辑

游戏启动阶段耗弹窗显示时即为引擎初始化与开发者首帧逻辑,关于该阶段耗时,开发者需要注意的是:
    1.MonoBehaviour脚本的首帧Start/Awake应足够少逻辑,优先将画面呈现
    2.初始场景不宜过大,通常呈现Splash场景即可
    3.初始场景中需要后续主场景或配置加载时可采取分帧策略,切勿在Start/Awake阻塞。

游戏内资源按需加载

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

优化总览

我们总结下启动时序以及开发者、平台提升启动性能的优化事项:

常用启动优化技巧

常用启动优化工具

AssetStudio(推荐)

一款开源的资源查看工具,可以检查data首包以及AssetsBundle(或新Addressable)的资源内容,对于分析打包的资源正确性和冗余具有很好的帮助。

BuildReportTool(推荐)

很好的前端用于查看Unity编译信息,BRT显示了编译时包括的每个资源占用的存储空间以及未使用资源情况。

Asset Hunter

资源清理插件,可将项目中无用资源清理

Unity Addressable Assets System