现在各个平台打包产物中都有一个“bundle-scripts”这个文件夹,比如OPPO,VIVO,微信。这个文件中会有当前项目的远程包名字的文件夹。
如果这个文件夹中没有的远程包,是没法远程加载的,加载的时候会报错。
那cocos这边如何动态新增远程包呢?不能新增一个关卡远程包,主包就要打包然后重新发布吧。
游戏的关卡非常复杂,虽然不依赖JS,但是依赖预制体和资源。
现在各个平台打包产物中都有一个“bundle-scripts”这个文件夹,比如OPPO,VIVO,微信。这个文件中会有当前项目的远程包名字的文件夹。
游戏的关卡非常复杂,虽然不依赖JS,但是依赖预制体和资源。
这种需求,在功能实现的时候,开发者就要支持关卡可配置化,
然后以更新配置的形式新增关卡
如果这个配置就是一个预制体呢?
预制体本身就是一个json格式内容喔
这题我会,心有多大胆,地有多大产。bundle的羁绊在于js脚本,但是看一眼bundle对应的js文件,如果是纯资源包(包内不含任何代码),那个js都是一毛一样的。所以大胆尝试了一波,重定向bundle加载的接口,直接使用loadRemote接口加载bundle的config.json文件,然后自己创建AssetManager.Bundle对象,完美略过没有对应js的问题。此处要注意下载bundle中的一些特殊处理(如zip等),具体可对照源码中对应平台engine-adapter.js中的下载逻辑
现在bundle中不管有没有js,就算只有一个图片,都会在 bundle-scripts 创建一个 index.js,所以目前是没法动态新增bundle的是吧~
明白,现在就是bundle中没有js也会在 bundle-scripts 中创建一个index.js,导致没法动态新增,目前看来只能改引擎代码了是吧。
嗯,关卡比较复杂,要依赖预制体。
我的配置和资源都是放在cdn上,根据版本号加载的,
bundle里面的.json, .js , 和你说的什么 bundle-scripts我都不太了解,
但是我知道bundle是可以加md5的,
假设你的东西都在 sub_bundle里,
带md5可以构建出带md5的bundle包: sub_bundle.f13ea;
你有内容要更新的时候, 直接放弃之前的bundle包, 重新构建一个,如 sub_bundle.d33eb
上传新的bundle包, 在代码里利用 bunderVersion = ‘d33eb’, 去加载新的bundle包;
重定向就行,不用重新去编译引擎代码。
oldLoadBundle = assetManager.loadBundle;
assetManager.loadBundle = function (name, options, onCompleted) {
// 如果是普通包,走 oldLoadBundle.call(assetManager, name, options, onCompleted);
// 如果是新增包,走新逻辑
}
这样就能重定向掉了,在业务逻辑之前找个地方塞入这段代码就行。
明白,感谢 
补充一下
构建的时候勾选 MD5 Cache,
构建后assets/sub_bundle/下
就会有 config.d33ee.json, index.d33eeb.js

感谢解答,不是版本问题,是无法动态加载新增的远程包~
噢,是我理解错了
这个不错,学习了~感谢 