资源文件夹
版本检查:2017.3 - 难度:高级
这是关于资产,资源和资源管理系列文章的第三章。
本章讨论资源系统。这是一个允许开发人员将资产存储在名为Resources的一个或多个文件夹中的系统,以及使用资源在运行时从这些资产加载或卸载对象的系统。
2.1.资源系统的最佳实践
不要使用它。
这个强有力的建议有几个原因:
- 使用Resources文件夹会使细粒度的内存管理变得更加困难
- 资源文件夹使用不当会增加应用程序启动时间和构建时间
- -随着资源文件夹数量的增加,这些文件夹中资产的管理变得非常困难
- 资源系统降低了项目将定制内容传送到特定平台的能力,并消除了增量内容升级的可能性
- -AssetBundle变体是Unity用于根据设备调整内容的主要工具
2.2.正确使用资源系统
在不妨碍良好开发实践的情况下,资源系统有助于两种具体用例:
Resources文件夹的简易性使其成为快速原型的优秀系统。但是,当项目进入全面生产阶段时,应取消使用Resources文件夹。
如果内容是:Resources文件夹可能在一些微不足道的情况下很有用。
- 一般在项目的整个生命周期中都需要
- 不是内存密集型的
- 不容易修补,或不跨平台或设备不同
- 用于最小自举
第二种情况的例子包括用于托管预制件的MonoBehaviour单件,或包含第三方配置数据(如Facebook应用程序ID)的ScriptableObjects
2.3.源序列化
在构建项目时,名为“资源”的所有文件夹中的资产和对象都合并为单个序列化文件。该文件还包含元数据和索引信息,类似于AssetBundle。如AssetBundle文档中所述,此索引包含一个序列化的查找树,用于将给定对象的名称解析为适当的文件GUID和本地ID。它也用于在序列化文件正文中的特定字节偏移处定位对象。
在大多数平台上,查找数据结构是一个平衡搜索树,其构建时间以O(n log(n))速率增长。随着资源文件夹中对象数量的增加,这种增长也会导致索引的加载时间增长超过线性。
此操作是不可跳过的,并且在显示初始非交互式启动画面时出现在应用程序启动时。据观察,初始化包含10,000个资产的资源系统在低端移动设备上会消耗多秒,即使资源文件夹中包含的大部分对象很少真正需要加载到应用程序的第一个场景中。