介绍
将资产存储在一个或多个名为Resources的文件夹中,并在运行时使用Resources API 从这些资产加载或卸载对象。
Resources System的最佳实践
不要使用它
出于以下几个原因,提出了这一强烈建议:
使用 Resources 文件夹使细粒度的内存管理更加困难
资源文件夹使用不当会增加应用程序启动时间和构建时间
随着 Resources 文件夹数量的增加,管理这些文件夹中的 Assets 变得非常困难
资源系统降低了项目向特定平台交付自定义内容的能力,并消除了增量内容升级的可能性
AssetBundle Variants 是 Unity 用于根据每个设备调整内容的主要工具
正确使用资源系统
有两个特定的用例,资源系统可以在不妨碍良好开发实践的情况下提供帮助:
1、Resources 文件夹的易用性使其成为快速制作原型的绝佳系统。 但是,当项目进入全面生产阶段时,应取消使用 Resources 文件夹。
2、 Resources 文件夹在一些琐碎的情况下可能会有用,如果内容是:
a. 通常在项目的整个生命周期中都需要
b. 不占用内存
c. 不容易打补丁,或者不会因平台或设备而异
d. 用于最小引导
第二种情况的示例包括用于托管预制件的 MonoBehaviour 单例,或包含第三方配置数据(例如 Facebook 应用程序 ID)的 ScriptableObjects。
Resources序列化
构建项目时,所有名为“Resources”的文件夹中的资产和对象都合并到一个序列化文件中。 该文件还包含元数据和索引信息,类似于 AssetBundle。 如 AssetBundle 文档中所述,该索引包括一个序列化查找树,用于将给定对象的名称解析为其适当的文件 GUID 和本地 ID。 它还用于在序列化文件主体中的特定字节偏移处定位对象。
在大多数平台上,查找数据结构是一个平衡的搜索树,其构建时间以 O(n log(n)) 的速度增长。 随着资源文件夹中对象数量的增加,这种增长也会导致索引的加载时间以超线性方式增长。
此操作不可跳过,发生在应用程序启动时,同时显示初始非交互式启动画面。 据观察,在低端移动设备上初始化包含 10,000 个资产的资源系统会耗费数秒,尽管实际上很少需要将资源文件夹中包含的大多数对象加载到应用程序的第一个场景中。