Unity Resources System
定义
Resources System允许开发者在项目中的Resources文件夹下存放一个或多个资源文件夹,并且可以在Unity运行时通过Unity提供的API对资源和对象进行加载和卸载。
如果Resources中的文件结构复杂,内容多,会给应用常来什么影响?
1、内存增加、包体增加
2、管理复杂度增加
3、构建时间增加
4、影响游戏的启动时间
内存、包体增加,能详细说一下吗?
1、每个文件都有大小,在Resources文件夹下的资
源都会被编译到包体中。
2、文件变大,所儒内存也会赠加。
管理复杂度增加是什么?
Resources资源结构复杂,在资源管理上成本会增加,内存管理成本也会增加。
构建时间增加是什么
打包时间增加,在Resources文件夹下所有的资源和对象都会被合并到一个序列化文件中去,该序列化文件的合并过程会随着Resoure中资源的增加而增加。
序列化文件
metadata
indexing information 索引信息
该索引包括一个序列化的查找树,该树通过给定的对象的名称然后解析出该对象对应文件的GUID (文件的唯一标识)和local ID,它也可以在根据给出的字节偏移量,将对象定位在序列文件的正文中(它还用于将对象定位在序列化文件正文中特定字节偏移处)。
为什么会影响游戏的启动时间
在启动时,对项目中所有需要立刻用到的对象进行Instance Id实例化(如内置scene中引用),以及Resource文件夹下包括的所有对象都需要实例化。
启动对Resource文件的处理
在大多数乎台上,查找数据结构是平衡的搜索树 ,其构建时间以O(nlog((n))的速度增长,这种增长还导致索引的加载时间随着"资源"文件夹中"对象"数量的增加而线性增长。
在应用启动进行闪屏显示的时候,该操作是不可以跳过的。
推荐放在Resources下的资源
1.该内容整个游戏生命周期都存在
例如:
MonoBehaviour的单例
序列化的配置数据(不会变)appId
加载界面的Prefab
2.资源所占内存小
例如:
名字随机配置
默认头像图标
道具品质框
3.资源不会热更新
需要热更新的不要放在Resources目录下
4.不会因为平台或者设备变化的资源
例如Android平台和IOS平台显示内容不一样,最后不要放在Resources目录下
以上4条可以相互结合使用