creator 版本3.7.3 pc测试热更
这两天在研究热更,有几个疑问请教一下
1.使用assetManager.loadBundle加载服务器端的bundle,第一次加载后,更新服务器端的bundle,第二次加载客户端并未更新服务器资源。文档说是版本信息在setting.json里,在主包里找到setting.json看见了版本信息,请问setting.json如何更新?
2.assetManager.loadBundle未包含加载进度,如果想显示进度条该如何处理?
-------认为是另一种方式热更(繁琐而灵活)------------------------------------------------------------------
3.看过简易教程,借用manifest的方式来做热更,需要添加搜索路径。然而main.js并不是可以随意修改的,于是想到放assert中加载的第一个ts文件中,如此做,这个文件将永远得不到更新。有没有更优解?
第一个问题,勾选md5不就可以了吗。
md5勾选过,主包setting.json未更新,导致子包版本依然读取的是老版本。要实现热更应该是先更新setting.json然后更新子包,第一问,问的是如何更新setting.json。或者是我的理解有误?
如果勾选md5了的话,那应该是main.js文件没有更新
你参考一下https://forum.cocos.org/t/topic/139407/8
楼主想要的是不重新进游戏实现热更新?
loadBundle并不会加载具体的资源,只是加载了配置,这个需要的是具体加载了多少byte的进度显示吗?
可以重启游戏,只是做个简单的热更。我看loadbundle操作简单,就想用它来快速实现热更,但是测试过程中发现版本文件(setting.json)没有更新,半天没找到解决方案,所以来论坛问一下。应该是某个点没理解到位
感谢你的链接,用这种方式可以解决问题3,似乎不能解决问题1
少回答了你一个问题:loadBundle在加载过程中会去检索更新对应版本,如果是有更新会从服务器下载,所以我想要得到下载的进度(下载了多少byte/多少个文件),不是加载的进度。
我可能明白你意思了,你要修改setting.json怕是要走热更,下载新的setting.json,新的setting中记录bundle的最新的MD5
对,可能这只是我想的方案。也许有什么理解不到位的地方,既然有检测更新功能,那么setting.json也应该有对应的更新手段,才算是一套完整的;还要手动做manifest那一套,是不是有点绕。
论坛有人实现过这种,为了减小包体,bundle里边只放资源,热更的时候构建两次,第一次勾选MD5构建出bundle,第二次不勾选MD5,构建出热更包,然后修改热更包中setting.json,把第一次构建出的bundle的MD5写进去。
看来只有手动拉一下setting.json,用拉到版本信息修改客户端的setting.json中的值。
如果构建bundle不勾选MD5,然后在热更重启前game.restart()前,清除一次bundle缓存,再重启后应该也可以加载到新的bundle资源,感觉这种应该也可以实现,但是没有试过。
这种就不是真正热更了,清除缓存后就是无脑更新了。
overrideSettings可以设置setting.json中的bundle信息,操作起来也不难。版本号也可以自己设定不用md5码,过几天按这个思路来走一遍,感觉这样是可行的。
overrideSetting的设置时机一定得在Application.js吗?如果是这样不是得把每个平台的Application.js都改一遍么,大佬求教
不需要,任何时候设置都可以,只是设置前如果需要资源会拉到老的,设置后才会拉到新的。一般是在第一个场景里设定,要是登录界面不考虑更新的话,也可以在登录界面里。
非常感谢。
大佬,还有个疑问,如果我的main包是远程包,是不是得先 overrideSetting,然后把main bundle卸载了,再重新load main bundle就可以了?
对。实际操作中mian做成功能固定永久不变的包(空包/少量启动加载),overrideSetting在main之后,就不需要考虑平台问题了。当然底层有改动的除外
!非常感谢 