请问一下如何热更资源

cocos3.7以上版本可以实现这样的效果吗?
比如说我现在的远程资源需要有更新,但是我不想重新打包微信小游戏,可以把cocos打包出来的远程资源直接覆盖原来的远程资源后,小游戏可以读取到最新的吗?
如果需要这样改的话,大佬们有什么好的方案或案例吗?

1赞

别想了 官方不支持热更 只能提交版本审核去

可以热更资源,但cocos的打包处理方式没法热更。远程bundle相当摆设。
得用点小手段

微信不许加载包外脚本。除非你只想更新资源。

我不加载脚本~~我就是存更新资源,比如说表更新的资源,是不是只要我在打包的时候不勾选MD5就可以了?

大佬啥小手段?打包不勾选MD5?

不行的,替换资源只能保证新玩家可以下到新的资源,老用户已经有缓存了,他不会再去和服务器请求。另外现在基本都开了CDN加速下载,不带MD5的每次更新都还要手动去刷CDN。我们的方案是维护了一份热更的映射表,比如{ “resources/config.aaa.json”:“resources/config.bbb.json” },在启动的时候先拿到映射表,同时修改了downloader.ts的源码,检测到当前下载url在映射表里的话,就替换成新的地址,不想改源码的话,可以把这些处理用assetManager.transformPipeline.append(xxxx)插入到Url转换流程里去

public download (id: string, url: string, type: string, options: IDownloadParseOptions, onComplete: CompleteCallback): void {
    ///......
        //配置了热更地址
        if(this._hotfixServerUrl && this._hotfixServerUrl != "") {
            let relativePath = this.getRelativePath(url)
            //映射表
            let hotfixPath = this._hotfixAssets[relativePath]
            if(hotfixPath) {
                //修改下载地址
                url = this._hotfixServerUrl + hotfixPath
            }
        }
   //.......
  1. 需要开启hash
  2. cocos支持输入hash值加载新包,但不适用。需要自己维护一份新包hash列表的文件:

image

  1. 需要处理bundle下载,否则会默认加载新的hash的js文件,微信报错。所以只需要将js重新定向到之前hash文件就行了。

可以。
项目内远程加载某路径的配置文件。
然后给项目写一个配置热更脚本(进行配置打包+配置上传+CDN刷新)。

我们大概是这么做的。
至于热更JS代码,我就不懂了。

我的想法是表不走cocos的打包机制,走远程加载,通过html地址去加载资源服的表数据,然后通过和服务器发送过来的表版本号对比,不一致的话,就重新拉去CDN上的新表数据来更新游戏中的数据,我看了一下cocos可以支持html加载文本数据。不知道我这样的想法行不行的通~~

自己在cdn放一个bundle列表,记录每个bundle的version

加载bundle的时候传入version

是的,我就是想这样搞~~把表拆出来单独管理版本,不加入在cocos 的打包机制里面去,剥离出来通过地址去cdn自己加载,这样应该可以实现热更了

把bundle标记为远程包就好了 还是走cocos的流程,只是自己加个版本管理就行

ok的,注意处理 本地缓存 和 cdn缓存就行。
应该也挺好实现。