1.测试了下,如果远端bundle已经加载过一次,那相关资源就会下载到本地,而文档中对这块儿并没有详细介绍,只说是会一直在游戏过程中。
2.我修改了远端bundle的资源,关闭app重新打开,再次加载bundle,显示的还是第一次的内容,没有更新到。文档说要指定一个Hash值。
那么问题来了,我怎么动态获取到远端bundle的md5呢?
1.测试了下,如果远端bundle已经加载过一次,那相关资源就会下载到本地,而文档中对这块儿并没有详细介绍,只说是会一直在游戏过程中。
2.我修改了远端bundle的资源,关闭app重新打开,再次加载bundle,显示的还是第一次的内容,没有更新到。文档说要指定一个Hash值。
那么问题来了,我怎么动态获取到远端bundle的md5呢?
构建的时候在构建面板中勾选MD5 Cache,此时资源将生成并附加Hash,由此可解决资源缓存问题。
加载bundle代码如下:
cc.assetManager.loadBunle("远程路径", (err, bundle)=>{});
cc.assetManager.loadBunle("远程路径", {version: 'hash值'}, (err, bundle)=>{});
引擎的底层的downloader的loadbundle函数里,做了两件事情。
- 下载config.json
通过引擎加载代码:
var config = `${url}/config.${version ? version + '.' : ''}json`;
我们可以看到,config的路径 = url + config.hash 值形成了一个绝对URL,通过GET方式去下载到这个配置文件。
version 的由来:
var version = options.version || downloader.bundleVers[bundleName];
options为loadBundle()的第二个参数
downloader.bundleVers 为main.js中init的options
到这里就很清晰了,我们得出结论:
- 如果是在同工程中生成的bundle,可以不传version,因为引擎帮我们init了options,里面有版本
bundleVers, 要么loadBundle时传Hash。此时最好将版本在后台配置,通过下发来拼接给引擎底层下载。那么,问题答案:
- 同工程中构建,使用loadBundle时不需要传版本,非得传,通过
window._CCSettings.bundleVers[bundleName]可以获取到版本
可是如果budle很多的话,不就后台要填好多的hash值,不太方便
老铁有解决办法吗?