Unity AssetBundle(1):Assets打包和依赖(Dependencies)理解
看了一些资料:
对Unity5.x后的AssetBundle依赖机制有了一点理解,创建了一个项目验证 github:GeWenL / AssetBundlePro AbScene.unity
资源有哪些? Some common types of Asset
assetbundle打包命令是 BuildPipeline.BuildAssetBundles ,格式有:
引用:
依赖的处理不当是导致 资源冗余 的重要原因。
我的测试项目采用不压缩(UncompressedAssetBundle)的方式;
4个Sprite纹理(不压缩),tex1-4; 单独打成不压缩的ab包,大小如下图所示。
现在有5个prefab, sprite1.prefab 关联纹理tex1, sprite2.prefab 关联纹理tex2, sprite3.prefab 关联纹理tex3, sprite12.prefab 关联纹理tex1/tex2, sprite123.prefab 关联纹理tex1/tex2/tex3.
将这5个prefab分别打ab包,prefabsp1、prefabsp2、prefabsp3、prefabsp12、prefabsp123.
分成两种情况:
这5个prefab ab包体积很小,仅仅关联了纹理ab包
例如sprite1和sprite123两个prefab ab包的manifest文件,展示了关联的的tex1.png、tex2.png、tex3.png已经打在了对应的ab包中,因此要依赖对应的ab包,Dependencies是依赖ab列表。
此时,仅加载sprite123.prefab(AssetBundle.LoadFromFile + bundle.LoadAsset + Instantiate):
会发现使用tex1.png、tex2.png、tex3.png的Image对象上的图已经missing,显示也为错误的白色。原因是prefabsp123不包含图片这3张图片( UnityStudio 验证),只加载它,没有办法找到对应纹理。
想要正常显示,需要提前加载tex1.png、tex2.png、tex3.png对应的ab包,例如提前加载tex1、tex2 ab包,效果如下:(tex1、tex2 正常显示,但tex3未加载也未正常显示)
使用 UnityStudio 查看ab包能看出,prefabsp1不仅包含sprite1.prefab,还写入( written out to this single file )了Sprite-tex1.png,同样prefabsp12、prefabsp123也拥有一份自己的tex1.png,如下图所示。
这种打包方式,被多次引用到的资源将在每个用到它的AssetBundle独自存在一份。也就是常常提到的资源冗余。
核心是:避免资源冗余
做法是: