上边其实只讲了原理和可行性. 具体如何控制只更新一次并未讲到.
目前自己在本地已经完善了这部分功能,大概代码如下:
// 引擎启动前需要记录一下当前版本的bundle列表.(main.js修改)
// 暂存当前版本的md5. 用于更新patch.
let currentBundles = settings.bundleVers;
const currentVer = cc.sys.localStorage.getItem("currentVers");
if (!currentVer) {
cc.sys.localStorage.setItem("currentVers", JSON.stringify(currentBundles));
}
// 启动后,在loading过程中检测需要下载的bundle,并异步进行下载. (业务代码中添加执行.)
private async doLoadBundles() {
const updateInfo = cc.sys.localStorage.getItem("updateInfo");
const currentVer = cc.sys.localStorage.getItem("currentVers");
if (!updateInfo || !currentVer) return;
let updateInfoObj = JSON.parse(updateInfo).bundles;
let currentVerObj = JSON.parse(currentVer);
for (let b in updateInfoObj) {
if (updateInfoObj[b] != currentVerObj[b]) {
console.log(">>>更新Bundle:", b);
await Context.get().getBundle(b);
currentVerObj[b] = updateInfoObj[b];
cc.sys.localStorage.setItem("currentVers", JSON.stringify(currentVerObj));
console.log("<<<Bundle更新完成:", b);
}
}
}
