当前位置:   article > 正文

Unity开发(四) AssetBundle最小依赖树资源打包导出_最小依赖树算法

最小依赖树算法

要解决的问题

这篇文章,解决的是AssetBundle打包的时候,生成最小资源的问题。
我们要解决的问题是

A
B
C
D
E
F
G

把上述的依赖结构切分成如下的结构

C节点
B节点
A节点
C
F
G
B
A
D
E

然后打包导出ab的最小依赖树

实际上这篇文章是一个算法问题,把依赖项都找出来,然后把不需要的节点去掉,把共同依赖的节点独立出来,把能合并的合并,保证每一份资源只有独立一份,没有冗余

AssetBundle资源导出

我们都知道Unity 5.x之后,AssetBundle导出发生了很大变化。最大的区别是提供了一套新的导出机制,包括统一接口,assetBundleName和assetBundleVariant,依赖关系自动化处理,可以不像4.x那么需要自己保存依赖关系,然后使用pop和push的接口打包了。
Unity 5.x能够自动化处理依赖关系,但很容易导致共享依赖资源被重复打入多个ab中,导致资源形成大量冗余。
我们可以知道Unity解决的是——导出输入节点的ab,其ab包含其所有依赖内容,并对输入ab之间形成依赖节点关系
不是很好懂是不是,那看下图

原依赖图
导出-节点A
导出-节点B
A
B
C
D
A
C
D
B
C
D

根据原依赖图,如果A和B是prefab,共同依赖材质C,C依赖图集D。

  1. 如果只把A和B作为节点交给AssetBundle打包接口,导出2个节点A和B,A和B都会冗余的包含C和D。这不是想要看到的。
  2. 如果把A、B、C和D都交给AssetBundle打包接口,导出4个节点A、B、C和D,这样导致所有文件都很碎。一般一个prefab(或节点)包含大量依赖项(10+),而这些依赖项都是其独有,把每个依赖都打成一个节点,对导出、加载效率和内存都是有压力的。
  3. 如果把A、B和C交给AssetBundle打包接口,导出3个节点A、B和C,这是最优的方法,也就是最小依赖树。
导出-节点C
导出-节点B
导出-节点A
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/341613
推荐阅读
相关标签
  

闽ICP备14008679号