【Bundle的组成】
Bundle里包含Asset、Asset由Object组成,Object由Type组成。前文说了Type由MonoScript的方式处理,这里我们需要从Object看起。
Asset由Object组成,Object可能依赖其他Asset中的Object,Asset之间的依赖本质是由Object之间的依赖造成的。而Bundle是由Asset组成的,确定Bundle包含哪些Asset,实际上就是要确定Asset要有哪些Object,IncludeObject必需要有,而ReferencedObjects不一定会有。
因此,Object会依赖其他Object,所以Asset会依赖其他Asset,进而Bundle依赖其他Bundle。
我们组建Bundle有两个目标和一套规则。
两个目标是:
- 目标1:一个Asset尽可能只在一个Bundle内,不在多个Bundle内
- 为保证这个目标,需要做剔除依赖Object的操作,不同的Asset依赖的Object不能相同
- 目标2:一个Asset及其依赖的Asset尽可能多的在少数Bundle内,不在多个Bundle内
- 为了保存这个目标,需要统计Asset被依赖的次数和深度,得到依赖相关性
规则有:
- 规则1:手动指定Asset在某个Bundle时一定要在某个Bundle内
- 规则2:业务逻辑上属于同一个实体的Asset放在同一个Bundle内
- 例如一个角色的纹理、模型和动画打包在一起
- 规则3:场景内共享的资源放在同一个Bundle内
- 规则4:不同类型的资源放在同一个Bundle内
- 规则5:零散的很小的资源放在同一个Bundle内
- 规则6:各种结合业务实际情况的自定义规则