版本检查: 2017.3-难度: 高级
这是第三章的一系列文章涵盖Assets,Resources和resource management 在 Unity 5。
本章讨论了Resources系统。这个系统允许开发人员在一个或多个名为Resources的文件夹中存储Assets,并在运行时使用Resource API从这些Assets中加载或卸载对象。
2.1. Best Practices for the Resources System
Don't use it.
提出这一强有力的建议有以下几个原因:
- 使用Resources文件夹使细粒度内存管理更加困难
- 不正确地使用Resources文件夹将增加应用程序启动时间和构建的长度 --随着Resources文件夹数量的增加,管理这些文件夹中的Assets变得非常困难
- Resources系统降低了项目向特定平台交付自定义内容的能力,并消除了增量内容升级的可能性 --AssetBundle Variants是Unity的主要工具,用于在每个设备的基础上调整内容。
2.2. Proper uses of the Resources system(正确使用 Resources system)
有两种特定的用例,其中Resources 系统可以帮助而不妨碍良好的开发实践:
- Resources 文件夹的易用性使它成为一个快速原型的优秀系统。但是,当项目进入完全生产阶段时,应该取消对Resources文件夹的使用。
- Resources 文件夹在一些简单的情况下可能很有用,如果
- 在项目的整个生命周期中通常需要的
- 不需要占用内存
- 不容易修改,也不因平台或设备而异
- 用于最小引导
第二种情况的例子包括用于托管prefabs的MonoBehaviour单例,或者包含第三方配置数据的ScriptableObjects,如facebook应用程序ID。
2.3. Serialization of Resources
在构建项目时,所有名为“Resources”的文件夹中的Assets和对象都被组合成一个序列化文件。该文件还包含元数据和索引信息,类似于AssetBundle。正如AssetBundle文档中所描述的,该索引包括一个序列化查找树,用于将给定对象的名称解析为其适当的FileGUID和LocalID。它还用于在序列化文件正文中的特定字节偏移量处定位对象。
在大多数平台上,查找数据结构是一个平衡的搜索树,其构造时间以O(n log(N)的速率增长。这种增长还会导致索引的加载时间随着Resources文件夹中的对象数量的增加而线性增长。
此操作不可跳过,并在应用程序启动时发生,同时显示初始的非交互式启动屏幕。初始化包含10,000个Asset的Resources系统在低端移动设备上花费了多秒时间,即使Resources文件夹中包含的大多数对象实际上很少需要加载到应用程序的第一个场景中。
官方译文(未完待续)