1. 先说结论
a. 当一个AssetBundle中的资源引用了不在别的AssetBundle中的资源时,该资源会在打包时复制一份到AssetBundle中。
b. 当多个AssetBundle中的资源引用了不在别的AssetBundle中的资源时,该资源会在打包时复制多份到每一个AssetBundle中。
c. 当AssetBundle中的资源引用了位于其他AssetBundle中的资源,会对那个AssetBundle形成依赖。
2. 举例说明
如图所示:A引用了B和C,B和C同时引用了D。
情况1 只对A打包: A.ab里包含A、B、C、D
情况2 分别对A、B、C打包: A.ab里包含A、D,且依赖于B.ab、C.ab;B.ab里包含B、D;C.ab里包含C、D。此时,D被打包了三份。
情况3 分别对A、B、D进行打包: A.ab里包含A、C,且依赖于B.ab、D.ab;B.ab里包含B,且依赖于D.ab;D.ac里包含D。此时,各个资源只被打包一次。
所以,在打包时,我们需要对资源进行合理的划分,当最后一层被多个上层引用时,需要考虑将其打成一个独立的ab包。
在加载ab包里的资源时,我们需要先加载该ab包依赖的其余ab包。合理的项目架构,在打ab包时,依赖层级一般不会超过三层。