讨论下2.4.3,内置的AB包能否被loadBundle方法加载出来

  • Creator 版本: V2.4.3

  • 目标平台: web预览以及ios真机

最近更新了cocos版本至V2.4.3,然后翻阅文档和论坛初步掌握了新版的资源加载方式,由于我源码看的不多,所以现在有一个疑问,文档上说内置的main包是存放所有在构建发布面板的参与构建场景中勾选的场景以及其依赖资源,那么我以为构建后,可以通过bundle.load的方式来加载main包里的资源:
cc.assetManager.loadBundle(“main”, null, (err: Error, bundle: cc.AssetManager.Bundle) => {
bundle.load(“textures/common/gold”, cc.SpriteFrame, (err: Error, assets: cc.SpriteFrame) => {
console.log(“main>>>>>>>”, assets);
});
});
结果构建ios包后,在真机上跑,日志里输出assets是undefind,所以内置的AB包无法以这样的方式加载资源还是我用的不对?望解答!

兄弟们,别只看不回复呀,经过测试,resources内置AB包里的资源可以通过上面的方式加载出来,但是main里的还是不行,奇怪,有没有官方大大解下惑

为啥要叫main,main是内置assetbundle,改个名字呗

感谢回复,我想加载的就是内置的main包,因为我看文档写着,参与构建的会放进main包,main包本质上我认为就是AB包吧,那既然是AB包,那我想能不能通过loadBundle的方式去加载main包里的资源呢?经过测试居然不行,但是不明白这是为啥

看源码不就知道了

这不是偷懒么,哈哈,希望有懂的人替我解答一下,我自己也去瞅一眼源码,但是不一定能看得懂啊

那你看下打出来的资源,你要load的这个资源真的在main包里面吗

资源我查看了,确实在构建后的main包里,路径是:main>>native>>D
9>>xxxxxxx,但是加载不出来,奇怪。。。

是不是构建后,内置AB包中路径会做变动
所有,靠这个路径获取不到?

1赞

在构建时,配置为 Asset Bundle 的文件夹中的所有 代码 和 资源,会进行以下处理:

  • 代码:文件夹中的所有代码会根据发布平台合并成一个 index.js 或 game.js 的入口脚本文件,并从主包中剔除。
  • 资源:文件夹中的所有资源以及文件夹外的相关依赖资源都会放到 import 或 native 目录下。
  • 资源配置:所有资源的配置信息包括路径、类型、版本信息都会被合并成一个 config.json 文件。

所有的AB包构建后都会这样处理,既然resources包和自定义的AB包能被路径获取到,为啥main包就不行?感觉还是说不通啊

这个有道理,main可以不保证路径。resources和普通bundle有按路径提取资源的接口,main可以不这样。

直接弄个空main,只有一行代码去load一个独立的bundle作为main的替代,这个法子应该行

至于main能不能按路径索引到资源,引擎组小秘书等着你哟

小秘书太贵了,我开不起呀:joy:那是不是就main是最特殊的?路径无法正确引用到资源?

没人来讨论了吗?? 再等一会没人讨论就结贴啦

你想吧,所有资源都会被放到AB包,那除了自定义的AB包外,其他都的目录可能是乱七八糟
,resources规定的就是动态加载的,其他的都是静态加载,既然是静态加载的,那开发者在代码中就不需要关心具体路径了

我总结的一些关于AB包的:

直接看构建出来的文件就知道了, 内置包中只有resources有资源的路径映射表。
你调用的bound.load都是根据这个映射表加载的

1赞

main是一个特殊的bundle,config.json和其它普通的bundle相比,paths字段为空

感谢大佬回复,了解了,嘎嘎嘎嘎嘎嘎嘎嘎