Demo示例——Bundle打包和加载

虚幻大学 xuhss 251℃ 0评论

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
Unity游戏里面的场景、模型、图片等资源,是如何管理和加载的?

这就是本文要讲的资源管理方式——bundle打包和加载。

5e0e89a8f1ff22cf431474cc18ec616b - Demo示例——Bundle打包和加载图片

Unity游戏资源管理有很多方式:

(1)简单游戏比如demo,可以直接在scene场景中引用住相关资源,然后打出真机包即可。

(2)场景静态引用资源过多会导致loding变慢,为了实现动态加载,加快场景加载速度,可以把资源放到Resources目录下。

(3)但这样还不行,因为没法实现热更新。实际项目大多使用的是AssetBundle,即AB打包方式。

热更新后面再展开讲,本文主要介绍下bundle打包和加载方案。

市面上有不同的AB打包方案和策略,这主要取决于游戏具体情况,包括游戏资源规模、游戏类型等。大致讲下几种方案的优缺点:

(1)直接打包prefab和scene。

优点是不用关心资源依赖关系,直接对prefab或scene打包即可,unity会自动把其依赖资源都打进同一个包里。缺点是造成资源冗余,包体变大。

(2)收集prefab和scene的依赖资源,先对依赖资源打包,再对prefab和scene打包,同时维护依赖关系,加载时要用到。

而对依赖资源打包又有不同的策略:比如将依赖资源和prefab/scene打到同一个包;将每个依赖资源单独打成一个个散列包;将被两个以上其他资源依赖的公共资源单独打一个包......

优点是可以定制适合游戏项目的依赖资源打包策略,可以避免资源冗余,减小包体;缺点是当依赖关系异常复杂时,可能会疯,比如场景A的依赖prefab A1-A100,prefab A1-A100各自又依赖一堆资源,且互相存在资源重叠......而且在加载Bundle时可能会引起内存峰值爆炸。

(3)各个项目的黑科技方案,模拟Unity的资源管理。篇幅有限,且属于进阶内容,本文就不深入讲了,有兴趣的可以关注公众号私聊或加微信。

这里来看一下Unity的资源打包和加载实现Demo例子。

Demo需求:一个场景,3个shader,使用AB方式打包,并加载到安卓真机显示。

(1)打包

首先,我们总共打2个AB包:shader单独打一个AB包,场景单独打一个AB包。Unity的打包API是BuildPipeline.BuildAssetBundles,打包代码如下:

64a7da3061e1a9a90ca9094f9686ed78 - Demo示例——Bundle打包和加载图片

然后就可以点击进行打包

25641a25e3d5ca436c4f3ead75ece7a8 - Demo示例——Bundle打包和加载图片

打包结束之后,可以看到以下bundle,除了生成shaderbundle和scenebundle,还自动生成了与目录同名的AB,以及每个bundle对应的manifest文件。

1dfc9c8e47df4ea6406d5190502a30e2 - Demo示例——Bundle打包和加载图片

其中AB.manifest记录了本次打包的所有bundle资源及其依赖关系,该文件可用于加载。可以看到scenebundle依赖shaderbundle。

8233e3049b5bc54dc98c9b4097ad84aa - Demo示例——Bundle打包和加载图片

其他两个manifest文件则是只用于编辑器打包调试辅助,包含每个bundle包含的asset资源、依赖的其他bundle资源。

ea51e2745177db4c85593dc72baa3485 - Demo示例——Bundle打包和加载图片d6f528496d0dfe2ff248eea081301bf0 - Demo示例——Bundle打包和加载图片

(2)加载

游戏启动之后显示一个UI界面,自动加载shader资源。同时提供一个按钮,点击之后加载场景。界面逻辑代码如下:

ceb4cbcfaad089f146cfa2c65e0df3fc - Demo示例——Bundle打包和加载图片

加载场景,应该先加载其依赖资源。上面我们知道场景依赖shader,所以这里就跳过收集依赖关系的逻辑了。

先加载shader资源,这里使用的是AssetBundle.LoadFromFileAsync这个Unity API。

79321294c7f080644eaad04e5168ea50 - Demo示例——Bundle打包和加载图片

然后加载场景资源。

6db698489dccd4d603d5ceb109783273 - Demo示例——Bundle打包和加载图片

(3)工程构建

最后打出apk真机包,可以使用编辑器构造。

9a3f60c0c49226d958e53c426daffdbd - Demo示例——Bundle打包和加载图片

最后生成如下apk包。即可安装到真机。

7850b7825a93c7f0b1426ae3088976a3 - Demo示例——Bundle打包和加载图片

最终结果如下:真机启动游戏,显示界面。

cca275639a28e30602f3b0ec7e623c02 - Demo示例——Bundle打包和加载图片

点击按钮,加载场景。完成。

686604c2aa9fbb3d59dffeea5ab565b4 - Demo示例——Bundle打包和加载图片

本节内容就介绍到这里,有问题欢迎留言或私聊~~~

欢迎关注我的微信公众号【unity大话东游】,更多的unity技术类和渲染类文章等着你哦!

76119ebe0c14c3cee067005e21841494 - Demo示例——Bundle打包和加载

转载请注明:xuhss » Demo示例——Bundle打包和加载

喜欢 (0)

您必须 登录 才能发表评论!