Resources目录
这篇文章主要讨论Resources系统。这是一个允许开发者存储一个或多个文件或文件夹在Resources文件夹下,在运行时使用Resources API进行加载或卸载的系统。
2.1 Resources最佳实践
不要使用:
强烈建议不要使用的原因:
- 使用Resources文件夹造成密集内存更加难管理
- 不恰当的使用Resources文件夹会造成应用启动时间和打包时间延长。随着Resources中的文件夹的增加,Assets管理将会变得更加困难。
- Resources系统降低了项目分发自定义内容到其他平台的能力,消除了增量更新文件的可能性。AssetBundle变体是Unity管理每个设备内容的主要工具。
2.2 适当的使用Resources系统
有两个特殊的用途,可以帮助开发者更好的开发应用:
- Resources的简易性对于快速原型开发很有好处。但随着项目的不断完善,快速迭代的时候,这时应该减少或避免使用Resources。
- Resources文件夹在某些情况下很有用,如果内容是:
- 整个项目生命周期都在使用的
- 非内存密集
- 不需要热更或跨平台不会变化的
- 启动时用到的小资源
第二种情况包括main预设的MonoBehaviour脚本,或包含第三方配置数据的ScriptableObjects,比如Facebook App ID。
2.3 Resources的序列化
当项目打包的时候,Resources下的所有Assets和Objects会打进一个序列化文件。这个文件包括metadata和索引信息,类似AssetBundle。正如AssetBundle documentation这里所说的,索引包括一个序列化查找树,使用对象名可以解析为相应的File GUID和Local ID。也可以根据偏移字节找到序列化文件中的Object。
在大多数平台,查找数据结构是时间复杂度为O(nlog(n))的平衡二叉树。随着Resources文件夹中Objects的增多,索引时间的增加会超过线性增长。
应用启动时,非交互性闪屏的播放是不可跳过的。观察初始化一个包含10000个assets的Resources初始化时需要消耗多少秒,尽管Resources文件夹中只有少量的Asset在第一个场景中使用。
网友评论