AssetBundle是很方便的机制,但是如果什么都不考虑就制作的话,就会做出容量非常大的AssetBundle,一个AssetBundle与其他AssetBundle相关联,导致必须加载很多AssetBundle,导致浪费资源。
在这篇Unity文章中,将为大家总结一下不要制作臃肿的AssetBundle的注意事项。
将AssetBundle分成小块,消除重复的资产
例如,有一个预制件和它引用的材质。

每个都有不同的AssetBundle名称,然后生成不同的AssetBundle,Prefab(预制件)的Assetbundle会附加这个依赖材质的信息。
在AssetBundle浏览器中看起来像这样。

如果在此处删除材质的AssetBundle名称,则材质将自动合并到预制件的AssetBundle中。

合并AssetBundle的优点是可以减少文件数量,但需要注意重复。
例如,将以前的材质更改为引用其他预制件2,而2的AssetBundle名称与以前的预制件不同。然后,材质将在1和2中复制。

这是无用的,因为正在复制和存储相同的资源作为单独的数据,对于本文的案例很小,或许可以无视体积的小大,但是如果每次使用文本时都复制字体文件,那么它就会占用大量得空间,这时必然的。
当然AssetBundleBrowser还时会友情的警告有关此类AssetBundle的相关信息。

防止重复的最佳方法是将AssetBundle分解为更小的部分,如果将所有资源制作成一个单独的资源包,则暂时不会出现重复。
但是,内置资产引用的资产也有例外,可从下文了解相关知识。
AssetBundle总结
现在,如果像上一节一样将所有资源制作成单独的资源包,则重复项将被消除,但文件数量将增加。
不可避免地,AssetBundle之间的依赖关系也变得更加复杂。因此,对于大型项目,AssetBundle的加载时间很长。
在这种情况下,有必要在组织AssetBundle的同时注意重复,将它们放在一起是一个逐案且繁琐的过程,但这是一个重要的优化。
了解AssetBundle的依赖关系
充分了解AssetBundle之间的依赖关系也很重要。例如,假设具有各种网格和运动的FBX是AssetBundled。

然后,创建一个仅引用此FBX中一个网格的预制件。此时,预制件仅使用一个网格,由于网格属于FBX AssetBundle,因此将加载此具有大量网格的AssetBundle。
其他的,动画事件也有各种各样的预制件,同一个atlas中包含的Sprite加上不同的AssetBundle名,导致atlas重复。
所以在设计资源时,充分理解并设计依存关系是很重要的。
…
以上是3D天堂网关于不先加载依赖项,AssetBundle可能会出错的全部内容,如果你有任何反馈,请随时在本页面下方留言。