远程资源更新不能更新js文件,因为js文件都在小游戏包内
远程资源更新只能更新在远程服务器的资源,在微信小游戏的包内主包与子包的资源都是不能更新的,比如构建时候点了初始场景分包,初始场景包内的资源也就不能更新.
远程资源更新适用场景:
提包了只想修改一下表或者替换一下图片,避免因为一个图片或者表的修改就得重新提包,如果有代码更改还是只能提包更新
远程资源更新这个的副作用
1.因为要自定义引擎,所以分离引擎功能失效了
远程资源更新简介:
小游戏打出来的包会有一个src目录下有一个settings.json文件,这里面包含了所有项目包的所有版本信息
因为我们得对settings文件下的远程包的版本进行更新·所以就不能放在小游戏包内·得放在远程服务器上通过网络请求得到.
当我们打个只更新远程资源的小游戏包的时候,会对上传到服务器的settings文件内的远程包的版本进行更新.
小游戏的远程资源包包内的脚本是放在小游戏包里的·远程资源包包内的资源配置信息是
放在远程服务器的.
3.8.1包内的脚本有版本信息作为后缀,所以得注意下面这个问题
比如我有一个远程包resources包,第一次构建出来的小游戏包内的settings文件resources包的版本是123,将settings文件上传到服务器
编译运行一次构建的工程,小游戏加载包时就会去找src/bundle-scripts/resources/index.123.js文件.第一次正常运行
当我们对resources包内资源进行修改后,重新新建一个构建任务构建工程,注意和第一次构建在不同的目录中,
构建完后去更新远程settings文件中resources包的版本信息,比如更新resources包版本改为了456,
编译运行第一次构建的工程,小游戏加载包时就会去找src/bundle-scripts/resources/index.456.js文件,但是第一次构建包里面没有这个文件,只有index.123.js文件,所以就报错了
所以我们加载包代码用的版本应该是123,包内资源配置版本用456就没问题了.
引擎2.4可以忽略这个·远程包生成的index脚本没有使用版本信息作为文件后缀
引擎3.8.1微信小游戏的使用
1.找到你的引擎目录\cocos\asset\asset-manager\downloader.ts文件找到bundleVers属性再下面添加代码
/**
* @en Version information of all bundles.
* @zh 新的包的版本信息。
*/
public newBundleVers: Record<string, string> = {};
改后的代码
往下拉找到init函数添加对newBundleVers属性初始化的代码
2.找到你的引擎目录\cocos\asset\asset-manager\asset-manager.ts找到init函数
添加代码 const newBundleVers = options.bundleVers || settings.querySettings(Settings.Category.ASSETS, ‘newBundleVers’) || {};
将this.downloader.init(server, bundleVers, remoteBundles);改为this.downloader.init(server, bundleVers, newBundleVers, remoteBundles);
改后的代码
2.找到你的引擎目录\platforms\minigame\common\engine\AssetManager.ts找到downloadBundle函数,添加修改代码
const configVersion = options.version || cc.assetManager.downloader.newBundleVers[bundleName] || cc.assetManager.downloader.bundleVers[bundleName];
const configSuffix = configVersion ? ${configVersion}.
: ‘’;
const config = ${url}/config.${configSuffix}json
;
改后代码
3.找到你的引擎目录\cocos\core\settings.ts找到init函数找到图中的代码
改为
let retryCount = 3;
const retryInterval = 2000;
let requestSettings = () => {
let xhr = new XMLHttpRequest();
xhr.setRequestHeader(“Cache-Control”, “max-age=0”);
xhr.open(‘GET’, path);
xhr.responseType = ‘text’;
xhr.onload = () => {
this._settings = JSON.parse(xhr.response);
resolve();
};
xhr.onerror = () => {
if (retryCount-- > 0) {
setTimeout(requestSettings, retryInterval);
} else {
reject(new Error(‘request settings failed!’));
}
};
xhr.send(null);
}
requestSettings();
xhr.setRequestHeader(“Cache-Control”, “max-age=0”)是为了避免使用缓存的settings文件·重新进游戏就能马上生效,不然得等到缓存的生命周期到限
4.开发者菜单-编译引擎
5.在引擎根目录执行
安装 gulp 构建工具
npm install -g gulp
安装依赖的模块
npm install
更新小游戏适配拷贝的engin-adapter代码
npm run bundle-adapter
推荐nodejs v15 版本, 3.8.1是拷贝的是合并平台适配后的代码,是从引擎engine\bin\adapter\minigame\wechat\engine-adapter.js拷贝到小游戏工程的,所以修改适配平台代码以后都得执行这一步,才能生成新的engine-adapter.js
6.小游戏构建完以后得修改打出来的application文件将
this.settingsPath 改为你setting的远程地址,这里我是已经改过了的
我写了一个构建插件用于辅助打完包后对第6步骤进行修改,以及拷贝remote目录到本地服务器目录,拷贝settings文件或者更新settings文件到本地服务器目录
新建一个构建任务选择微信小游戏,不勾选是否只更新远程资源,填写远程资源发布路径,填写远程配置发布路径,填写远程配置版本,填写远程配置地址,构建后用微信开发工具打开
打完包以后对test场景进行修改,挪动一下canvas下节点的坐标什么的
再新建一个构建任务,修改发布路径,不要和第一次构建的路径一样,避免覆盖了第一次的工程.除了勾选是否只更新远程资源,其他跟第一个构建任务一致,
构建完后用微信开发工具重新编译一下第一次构建的项目就可以看见变化了
第一次构建跟第二次构建应该都是debug模式或者都是release
插件
wechatgame-build.rar (158.7 KB)
测试工程
minigame-remote-assets-update-3.8.rar (12.5 KB)
引擎2.4.12微信小游戏的使用
1.打出的setttings是个js文件不是json,得转为json然后传到远程服务器
2.找到你的引擎目录\resources\builtin\adapters\platforms\wechat\res\game.js
注释//require(’./src/settings’);
注释//window.boot();
添加代码
let retryCount = 3;
const retryInterval = 2000;
const path = “%{settingsUrl}”;
let requestSettings = () => {
let xhr = new XMLHttpRequest();
xhr.setRequestHeader(“Cache-Control”, “max-age=0”);
xhr.open(‘GET’, path);
xhr.responseType = ‘text’;
xhr.onload = () => {
window._CCSettings = JSON.parse(xhr.response);
window.boot();
};
xhr.onerror = () => {
if (retryCount-- > 0) {
setTimeout(requestSettings, retryInterval);
} else {
throw(new Error(‘request settings failed!’));
}
};
xhr.send(null);
}
requestSettings();
改后的代码这样
也可以自定义构建模版以实现对game.js的修改
我写了一个扩展用于辅助构建后对第1步骤进行修改,对第二步的%{settingsUrl}进行填充,拷贝remote目录到本地服务器目录,拷贝settings文件或者更新settings文件到本地服务器目录
构建时先填写扩展面板的参数
工程和插件都在这里minigame-remote-assets-update-2.4.rar (215.7 KB)
扩展面板中不勾选是否只更新远程资源,填写远程资源发布路径,填写远程配置发布路径,填写远程配置版本,填写远程配置地址,新建一个构建任务选择微信小游戏,构建后用微信开发工具打开
打完包以后对test场景进行修改,挪动一下canvas下节点的坐标什么的
扩展面板除了勾选是否只更新远程资源,其他跟第一次填写的扩展面板参数一致,修改发布路径,不要和第一次构建的路径一样,避免覆盖了第一次的工程.
构建完后用微信开发工具重新编译一下第一次构建的项目就可以看见变化了
第一次构建跟第二次构建应该都是debug模式或者都是release
注意如果不能更新远程settings·构建时候会有错误抛出,注意看一下编辑器的控制台输出,当对非远程包的版本有更改就不能更新远程settings