战略插眼战略插眼
mark 动态热更方案
Mark···
支持一下!!!!
loadbundle能显示下载进度么
loadBundle 本身只是下载了bundle的 一个config.json文件,需要得到bundle对象后,执行preloadDir() 等接口进行资源下载操作。这些接口是有进度回调的。
下载进度是可以获取的
/**下载某个 远程Bundle */
private loadRemoteBundle() {
//options是可选参数,引擎会根据保留字段 进行对应的操作,这里添加了version和onFileProgress,可用来记录热更资源版本和下载进度
let url = "http://127.0.0.1:8080/sub";
let version = "12145"
const options = {
version: version,
onFileProgress: (loaded: number, total: number) => {
cc.log(`已经下载资源数:"${loaded} 总资源数:${total}`);
// this.progressBar.progress = loaded / total;
}
}
cc.assetManager.loadBundle(url, options, (err, bundle) => {
if (!err) {
// this.txtState.string = "加载远程bundle完毕"
cc.log("time" + new Date().toTimeString())
cc.log(cc.assetManager.assets)
// 查询缓存路径。
// cc.assetManager.cacheManager.getCache(bundle.base)
}
})
}
mark mark
挺好的,就是没有md5校验。。。 可能有未知的问题
mark~
怎么提前写入到update.json里面去?怎么知道目前设置bundle的文件夹里面大小多少,通过自己看文件夹手动写入到里面吗?
这个是资源数,不是多少MB,不能知道多少兆
以前做2dx的时候热更新方案:
在版本文件中列举了文件的md5和对应的大小 
这样在下载某个文件完成的时候就记录完成了多少kb多少mb
原生平台不建议勾选md5,我这几天看了热更新,而且热更新的文件是那两个manifest大小。拿取不了bundle文件的大小
我采取的热更是官方差分更新和zip更新相结合:
a 新用户下载一个只带热更界面的小包 第一次运行下载缺失的zip包解压运行
b 老用户用官方manifest 只更新改动的资源代码
这样兼顾了 新玩家只需下载小包 先安装进游戏 降低流失 同时一个zip文件下载解压时间成本远小于差分下载manifest大几千个文件开销
老用户用manifest 解决了临时更新解决重大bug文件少的情况 能迅速生成差分更新版本
补充下 zip下载解压都能显示进度 这点cocos引擎底层没有实现解压进度 导致文件过大 解压时间长感觉卡死机一样 体验不好
你说的是小程序平台还是原生平台呢
原生平台 小程序是不能热更的 走另外形式
zip通过jsb.downloader来下载吗,解压是自动解压还是要用第三方工具
这个问题好解决,可以用zip4j开源的解压,当解压的时候放在ui线程就不会界面卡住了