AB分配策略:
确定如何将项目的资产划分为AssetBundles并不容易。关键决策是如何将对象分组到AssetBundles中。以下是unity手册提供的主要策略是:
1. 逻辑实体分组(Logical Entity Grouping)
例子
- 捆绑用户界面屏幕的所有纹理和布局数据
- 捆绑一个角色/一组角色的所有模型和动画
- 捆绑跨多个级别共享的场景片段的纹理和模型
最常用的策略:按功能出现需要的资源,将需要的资源捆绑到一个ab里,这样,加载该功能界面的时候,只要加载该ab就可以,
如果功能比较复杂,可以视情况拆分粒度 逻辑实体分组是可下载内容(DLC)的理想选择,因为通过这种方式将所有内容分开,您可以更改单个实体,而无需下载其他不变的资产。
使用前提:开发人员必须精确地了解项目将在何时何地使用每种资产。
2. 类型分组(Type Grouping)
例子
类型分组是构建供多个平台使用的AssetBundle的较好策略之一。
3. 并发内容分组(Concurrent Content Grouping)
例子
- 每个关卡都包含完全独特的角色,纹理,音乐等
- 基于场景的包,每个场景束应包含大部分或所有场景依赖关系。
这些资产将同时加载和使用。
最后,无论您采用哪种策略,以下都是一些可以全面记住的其他提示:
- 将经常更新的对象与很少更改的对象分离
- 把需要同时加载的Asset尽量打包到同一个AB里。例如模型,其纹理和动画。
- 如果一次经常加载少于50%的捆绑包,请考虑将其拆分
- 如果您发现多个AssetBundle中的多个对象都依赖于完全不同的AssetBundle中的单个资产,请将依赖关系移至单独的AssetBundle。
- 根据依赖树进行的最优打包策略,公共资源单独打ab,独立资源打到一起。
- 如果不太可能同时加载两组对象(例如标准和高清资产),请确保它们位于自己的AssetBundle中。
- 考虑合并较小(少于5到10个资产)但经常同时加载其内容的AssetBundle
- 如果一组对象只是同一对象的不同版本,请考虑使用AssetBundle Variants
- 通常情况下,1M左右的AssetBundle包加载性能最好,冗余也可以接受,但是在Unity 5.3版本之后,对于AB文件的文件大小其实不必再限定于1MB之内。使用LZ4压缩,基于其Chunk的加载特点,AB加载很快,且内存占用要比之前小很多。所以LZ4的AB其实可以考虑更加粗粒度一些。
- shader字体等其他细碎并且需要常驻内存的资源打包到一起,启动游戏的时候常驻内存。
- 根据项目实际需求将需要经常热更新的资源进行单独打包。
AssetBundle Variants
AssetBundle Variants是Unity5的新特性。你可以将两组不同的资源指定为同一个AssetBundle但是指定不同的Variants,这样,你可以根据平台的不同加载不同的资源(例如支持高清资源的设备加载hd的Variants,不支持高清资源的设备加载sd的Variants)。可是使用AssetImporter.assetBundleVariant设置Variants。
生成AB后会获得 2 * (n + 1) 个文件, 分别是
- 对应资源的 AssetBundlName, AssetBundleName.manifest : 这是资源的集合, 实际运行时需要加载的(不需要对应manifest),所以要记录manifest的信息,然后拷贝ab不拷贝manifest
- AssetBundle文件所在文件夹名字, AssetBundle文件所在文件夹名字.manifest : 资源依赖信息
- 主bundle保存了所有的manifest(主要是各个bundle的依赖关系)
|