找回密码
 立即注册
查看: 586|回复: 0

Unity 游戏启动速度优化

[复制链接]
发表于 2021-4-1 21:30 | 显示全部楼层 |阅读模式
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、内存状态等对启动时间也有很多影响

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 03:20 , Processed in 0.125413 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表