新版AssetBundle项目实际运用经验总结

新版AssetBundle项目实际运用经验总结,不定时更新,最近刚好creator的AssetBundle出来了,研究了下官网的api中的教程,依然有许多不懂得地方,俗话说实践出真知,最近准备用一个demo集合官方的api来实际运用一下ab包和微信小游戏平台的搭配,看看新版本的ab包到底怎么用,以及使用过程中可能遇到的一些细节问题,如果有大佬已经运用在自己的项目中了,还望不吝赐教,共同进步,也可以造福社区,功德无量的事情啊

不定时更新,不定时更新,因为我自己也是处在研究阶段,还望多多包涵

-----------------------分割线2020727更新------------------------------------------------------
**

第一部分 构建assetbundle

**

经过上午的研究,和参考官方示例工程中的案例,目前大概对ab包的使用有了一个浅显的认识,在研究这一块之前,可以重点只看这两个官方的api链接中的内容
1.https://docs.cocos.com/creator/manual/zh/asset-manager/bundle.html
2.https://docs.cocos.com/creator/manual/zh/scripting/asset-bundle.html

下面是示例工程的项目结构,经过测试,本地运行、和打包微信小游戏运行,以及配置远程包运行都已经通过


文件夹目录说明

assets:----这个是我们项目的资源目录

prefab:是项目中的ui预制件的目录
res:是不需要动态加载的资源目录
resources:是项目中需要动态加载的资源目录
scene:是场景目录
Script:是脚本目录

internal:—是引擎公用的资源目录

关于项目资源的划分,每个项目有每个项目的安排,我自己的项目大体上是按照这个结构来划分的。
接下里,就要说下官网对于assetbundle优先级的解释了。按照官方的说法:


其中“从大到小”也就是数字字面的大小,11---->10—>…—>1。
所以在api的解释中,对于内置的四个assetbundle包的优先级官方设置的值是:

为什么要提到优先级?

因为合理规划优先级,能够保证资源加载的正确顺序,和减少包体的大小,如果不合理正确的规划优先级,就会出现下面这样的报错问题:

这个问题就是因为没有合理设置优先级的值,导致A资源先加载了,但是A引用的资源B还没有被加载出来,所以报错了。(在报错上面creator官方也给出了明显的提示,这挺好的)

测试工程的demo优先级,我是这么设置得:

1.internal的assetbundle引擎已经设置好了 ,不用管
2.resourece的assetbundle引擎也已经设置好了,不用管
3.prefab的优先级设置成7
4.res的优先级设置成了8(当然为了不与resources的优先级混淆你也可以设置成9)

因为prefab中的ui用到了res目录中的资源,所以res的assetbundle的优先级要高于prefab的优先级才行。

关于是否需要合并json(也就是压缩类型的选项),api中也给出了解答:

接下来就是选择构建发布项目,这里是用的微信小游戏测试的
(在打包之前,可以在模块设置中,将不需要的模块剔除掉,具体设置如下)

**

第二部分 加载(使用)assetbundle

**

在示例项目和api中已经提供了使用的方式,在本例的测试工程中,主要是实现了,从start场景跳转到游戏main场景(也就是游戏主场景),然后模拟常用的功能,比如加载ui,加载图集/sprite、加载json等等(当然这一切都是从assetbundle包中加载的)

跳转游戏主场景

具体的使用在脚本中可以找到,当然也可以参考api中的调用

https://docs.cocos.com/creator/manual/zh/scripting/asset-bundle.html

以上就是我目前对assetbundle的理解,至于远程包的使用,在构建的使用勾选远程包的选项,然后build之后,将remote整个文件夹放在阿里云服务器上面之后,删掉本地的remote,打开微信ide运行上传代码即可预览效果了。

可能有些细节方面没有注意的到,具体的最终运用,等在正式项目中使用之后,再来更新,如果有需要测试工程的,可以在下面地址下载的到

https://github.com/KioEngine/asset-bundle-demo

6赞

期待更新 ~~~

更新了,可以互相交流一下,我也是最近开始研究这个新版本的东西

楼主,ab不是可以用api动态加载吗?那res文件夹设置成ab后不应该也可以动态加载吗?为什么你说res文件夹是存放不需要动态加载的资源?

问个问题,你设置成合并为JSON,微信小游戏是不是都会加载到主包里面去,不是应该设置成小游戏子包吗?

mark.