美文网首页
Unity3D 冷启动简介

Unity3D 冷启动简介

作者: Charles陽 | 来源:发表于2021-05-13 11:01 被阅读0次

相比于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目录下面的所有资源会在ResourceManager中记录下来,而ResourceManager就是一个文件,通常是一个YAML格式的文本文件。而这个文件是会在冷启动时加载的。所以Resources目录下面的有越多的资源,那么这个ResourceManager就会越大,加载时间也会越长。

4.使用Resources方式管理资源还有一个坏处,就是所有的资源都是统一管理的,这样的资源的管理粒度没办法控制。建议使用AssetBundle的方式管理,这样可以使用多个AssetBundle来管理资源。把在Loading场景中需要的最小资源集放在一个AssetBundle中,这样在冷启动时启动Loading场景时,只需要加载一个AssetBundle即可。选择合适的粒度管理AssetBundle,可以在合适的时候加载某一个AssetBundle,不使用时就可以卸载某一个AssetBundle。

5.在Loading场景中,添加一个进度条,然后 同步加载 进入主场景所需要的AssetBundle,这样用户就不会感到等待时间太烦躁了。同步加载要比异步加载时间更短。

6.纹理资源在游戏中一般是最大的资源,选择合适的压缩格式进行压缩,既可以减少内存占用,又能够加快资源的加载速度。压缩格式的选择要从显示效果和压缩率上进行权衡。一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情况下,可能还可以考虑使用Alpha通道分离技术进行压缩处理。

7.代码文件可以编译成 .dll 文件, 减少大量TextAsset文件导致的碎片化加载时间。

8.强烈建议使用IL2CPP后端,如果使用IL2CPP,则可以忽略第7条。

相关文章

  • Unity3D 冷启动简介

    相比于Android或者iOS原生App,Unity3D引擎开发的游戏在冷启动时间上确实比较长。我在三星SM-N9...

  • Unity3D游戏在启动时都默认加载哪些资源

    我们都知道使用Unity3D引擎制作的游戏在冷启动时会加载一些默认的资源,包括纹理资源、Shader、Mesh等,...

  • Unity3D 与 iOS 交互

    Unity3D 简介 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游...

  • 性能优化07-启动优化

    01冷启动简介 启动时间就是点击app图标到app将数据显示到屏幕上面的时间 APP的启动可以分为2种冷启动(Co...

  • Photon Unity Networking基础教程 0

    简介 Photon Unity Networking(PUN)基本教程是基于Unity3D的教程。 它会告诉你使用...

  • 启动优化1

    目录 一、冷启动定义 二、 冷启动和热启动 三、冷启动、热启动的区别 四、冷启动时间的计算 五、冷启动流程 六、冷...

  • 冷启动和热启动

    一,什么是冷启动和热启动 二,冷启动流程 三,怎么对冷启动进行优化 一,什么是冷启动和热启动 定义:冷启动就是启动...

  • 【Unity3d 加密】Assembly-CSharp.dll

    简介 Unity3d 是基于 Mono的,我们平时写的 C# 脚本都被编译到了 Assembly-CSharp.d...

  • 冷启动优化

    一、什么是冷启动? 冷启动的定义/冷启动和热启动的区别/冷启动时间的计算 冷启动的定义:就是在启动应用前,系统中没...

  • Android java代码 和 Unity3d之间的通讯

    简介 正题 1、Unity3D脚本调用Android中的方法 很重要:不要去改"com.unity3d.playe...

网友评论

      本文标题:Unity3D 冷启动简介

      本文链接:https://www.haomeiwen.com/subject/vmmtjltx.html