RhinoFreak 发表于 2021-4-1 21:30

Unity 游戏启动速度优化

1.使用Resources文件夹使得内存管理更加困难。

2.随着Resources文件夹的增多,管理里面的Assets变得困难。

3.Resources系统降低了发布平台独立的定制内容的能力,并且使得增量内容更新变得不可能。

4.AssetBundle变量是unity的发布针对不同设备可定制内容的主要工具。

5.打包的时候会遍历所有res目录下,创建资源索引信息,会增加打包时间

6.进入app的时候 会加载所有res目录下索引信息,会增加加载时间

例外:

1.Resources系统非常适于快速开发原型和实验,因为他非常简单易用。当项目推进到完整产品时,强烈建议排除掉Resources文件夹。

2.Resources文件夹适合一些琐碎的资源,比如Resources文件夹里面的资源都是很小,或者整个项目生命周期都需要。这些内容都不需要打补丁。也即跨平台和设备时都不会变化。

适合第二种情况的例子比如有全局用的预制品,上面挂载一些单例MonoBehaviour脚本。或者是第三方配置资源,比如FaceBook App ID。

2.AssetBundle建议使用LoadFromFile,不建议使用LoadFromMemoryAsync

1.因为FromMemory这个api至少需要两倍的AssetBundle的尺寸内存。从AssetBundle里面加载的Asset会在内存里面拷贝3次:一次托管字节数组,一次本地内存拷贝还有一次就是Asset自身子啊GPU或者系统内存占用。

2.FromFile如果是加载一个未压缩的AssetBundle,这api十分高效。如果是未压缩或者LZ4压缩,api行为如下:

移动设备上API只加载头信息。只要在Load一个Object才会去加载特定的对象。不会浪费别的内存。

在编辑器里面会加载整个AssetBundle进内存。
image.png


UnityPlayer 初始化 nativeFile和Native.Load的影响

UnityPlayer是在UnityActivity onCreate的时候进行的初始化,该段的耗时主要是nativeFile简单的看了一下源码,这个方法会为文件创建一个索引目录,包括了文件的名称、大小、校验码等等,所以猜测这里的卡点主要是与文件的数量有关。这里我把StreamingAssets目录下放不同数量以及大小的文件进行测试NativeLoader.load+nativeFile的耗时。

手机当前cpu、内存状态等对启动时间也有很多影响
页: [1]
查看完整版本: Unity 游戏启动速度优化