相比于Android或者iOS原生App,Unity3D引擎开发的游戏在冷启动时间上确实比较长。我在三星SM-N9008手机上的测试结果是一个不算大的项目,如果使用Mono后端编译,则需要10秒左右的冷启动时间,而如果使用IL2CPP后端编译,则冷启动时间为7秒左右。
IL2CPP相比于Mono确实能够加快冷启动时间,这是可以预期的。因为在Mono编译的情况下,每个.cs文件都是一个TextAsset文件,而所有的.cs文件都需要在冷启动时候全部加载到内存中,这些碎片化的文件加载操作都会占用冷启动时间。关于冷启动需要加载哪些文件的分析,可以参考Unity3D游戏在启动时都默认加载哪些资源。而IL2CPP会把所有的C#代码编译成C代码,然后再进行编译、链接等操作,这样就减少了C#、DLL所带来的开销。
在项目中我们应该怎样加快游戏的冷启动速度呢?经过调研,我总结出以下几个优化的要点:
1.项目中添加一个Loading场景,这个场景会是游戏启动的第一个场景。
2.在Loading场景中尽量少的依赖,尽量少的纹理依赖、AssetBundle依赖、代码依赖,总之,这个Loading场景一定要尽量少的依赖,这个场景一定要尽量简单,这样才能保证尽快的加载速度。
3.在游戏中尽量少的使用Resources方式管理资源,Resources目