Unity AssetBundle(1):Assets打包和依赖(Dependencies)理解

如题所述

第1个回答  2022-07-09

看了一些资料:

对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独自存在一份。也就是常常提到的资源冗余。

核心是:避免资源冗余
做法是:

相似回答