Unity游戏开发入门Unity技术分享unity3D技术分享

07-02. Resources目录

2017-09-10  本文已影响57人  Wenchao

这部分主要讨论了Resources系统使用的相关问题。Resources目录允许开发者在一个或者多个Resources目录下存放Asset文件,在运行时可以通过Resources系统的相关API去加载和卸载Asset中的Object对象。

Resources系统的最佳实践方式

最好不要使用Resources系统。原因如下:

可以使用Resources系统的少数情况

Resources在某些特殊的情境下也是可以使用的,但是需要满足如下的情况,否则还是建议不要使用:

  1. Resources系统对于原型开发和实验阶段的产品而言比较好,因为简单容易使用。但是,最后确定推出产品的时候,还是应该去掉Resources系统的管理,改用AssetBundle系统。

  2. Resources在其他的情境下使用需要满足如下的条件:

第二种情况适用的例子包括:持有单例MonoBehaviour的全局Prefab【照相机Prefab】或者某个Asset包含第三方的配置数据文件,如Facebook APP id这些内容。

Resources系统的序列化

所有命名为Resources文件夹中的Asset和Object在打包过程中都会被处理成一个单一的序列化文件,这个文件和AssetBundle文件类似,包含metadata和索引信息,索引信息是一个序列化之后的查找树结构,用来将给定的Object的名称和对应的文件GUID和局部ID建立联系,还包括用来在序列化之后的文件中Object的偏移量。

在大部分平台上,这个查找树的数据结构是一个平衡二叉树【在大多数平台上,是通过std::multimap的C++标准模板库实现的】,构建复杂度是O(N·log(N)),N代表查找树中的Object数目。随着Resources系统中文件数目的增加,复杂度的增长速度是快于线性增长的。

这个操作在启动阶段是不可避免的,初始化一个超过10000个Asset的Resources系统在低端设备上超过数十秒,尽管这些Asset在第一个游戏场景中根本不会被用到。

上一篇下一篇

猜你喜欢

热点阅读