36

深入Unity AssetBundle打包加载使用-腾讯游戏学院

 5 years ago
source link: http://gad.qq.com/article/detail/285914
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
1.本文实例操作在unity5.x中资源打ab包。


2.其他的不多介绍,新建工程创建好工程目录,这里我建立一个uia的模块,还有其对应用到的美术资源目录。aUI是一个ui预制,其引用了美术uia目录中的资源。


5b62a58bbd456.png

 

3.实际开发中,我们也可以根据功能模块来按上面这样分目录结构,比较清晰。进入正题现在开始对uia的预制进行打ab包,打包代码如下:


5b62a59ea693f.jpg


4.打包菜单触发后,我们可以看到输出目录StreamingAssets下新增的数据文件,如下图:


5b62a5abd769d.png

 

首先打包之后根目录也会生成一个同目录名的ab包,其中的manifest作用就是供开发人员查看ab中的依赖关系等信息,加载根目录这个ab,可以得到一个AssetBundleManifest 对象如下图,然后就可以通过这个对象得到ab直接的依赖关系。


5b62a5b353cc6.png

 

5.查看ab包大小,后面会有比较。


5b62a5b992e13.png

 

6.加载ab包,并实例化aUI的预制,显示出来如下图:


5b62a5c12d754.png

 

加载可以从本地也可以从cdn上加载ab包,下面是本地的示例代码:


5b62a5d8da2f9.jpg

5b62a5e4b418c.jpg


注意:

一.加载完记得Unload,或者字典存起来,按已所需;

二.以上删除掉Extra Resources目录下uia里的美术资源,同样可正常显示,因为aUI预制在打包时其引用的资源也打包进去了。由于未对资源设置packing tag,如果在多个预制用到了同一份贴图资源,这种情况贴图会和预制分别被打包到多个ab,会造成内存空间浪费。

三.在实际开发中我们会给贴图设置好packing tag,使其打包到一个包,然后预制在分别打包,这样预制体打包会减小空间。这样我们每次使用的话要先加载其依赖资源,在加载实例化。


7.对资源设置packing tag,在打ab包

 

5b62a5f18c7e1.png

 

上图操作可在导入资源后脚本来自动化完成,详细可参考AssetPostprocessor。

新打包出来的由593KB变成了157KB,打包的预制体减小了空间。如下图:

 

5b62a5fcb83e1.png


8.实际开发中,可能我们的aui模块里的aUI预制、bui模块里的bUI预制等等都引用了相同一份资源,这样我们提出一个公共目录,用来放这些被多个引用的资源,打包的时候会先把这个公共目录打包,新版unity会自动处理好依赖关系,接下来过程里我们会说明。具体目录结构如下图:


5b62a6032d01e.png

 

9.修改aUI预制,使其引用一个公共目录common里的黄色按钮资源,如下图:


5b62a60a7db98.png

 

10.修改打ab包脚本,增加对公共目录common里的资源打包处理。上面有贴了预制打包的代码,这里节省篇幅不再贴了原理一样,主要就是遍历该目录,将文件名记录到数组,设置好assetNames,assetBundleName即可。执行脚本,我们将会看到如下图:


5b62a6103a4aa.png

 

以上其实我们就已经完成了依赖包的自动处理过程了,为了能更清晰的展现,这里将根目录的manifest贴出如下图:


5b62a6165be11.png

 

以上内容表示我们上面成功输出有两个ab包,common_res和ui_aui,其中依赖关系清晰可见,ui_aui依赖了公共包common_res,因为我们aUI预制引用了公共包的资源。这里就是unity新版打ab包的好处,你不用在麻烦的用Push/Pop维持一个依赖的堆栈。


11.上面都已经准备好了,那么继续通过第6步骤的加载过程,我们可以看到效果如下图:


5b62a61cb5509.png

 

我们先获得ui/ui_aui的依赖,然后加载其依赖包common_res,在加载包ui_aui,在实例化预制体即上图显示效果。整个流程日志输出如下:

 

5b62a62509ed4.png

 

以上动动手,带你深入unity实际开发中,资源目录结构的整理,资源的打ab包,ab包依赖关系的处理,ab包加载使用,欢迎阅读指正。



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK