Cocos Creator v2.4.0-rc.9 测试帖(正式版已发)

能详细描述一下操作吗?最好能录一下视频,让我这边能重现,感谢

请问一下: 比如一个子游戏打成一个bundle包, 我如果更改了子游戏里面的一张图片, 那我热更新的时候,是要更新整个子游戏的bundle包嘛

首先,你这个 bundle 是放在远程还是本地?

  1. 如果是本地的话:
    你可以参考我们的热更新方案来处理,这块和2.4之前是一样,热更新工具会比对每个文件,没变化的不做更新。

  2. 如果你的 bundle 放在远程服务器上的话:

当单个资源更新时,会比对单个资源的md5去重新下载单个资源,所以一定要勾选md5 cache 选项哦。另外你需要注意的是,当bundle内的单个资源更新时,bundle的md5也会跟着发生变化。bundle的md5是记录在settings.js里面的,所以你需要更新下settings.js, 这样才能下载到最新的bundle的记录。如果你想连settings也不更新的话,loadBundle 也支持传入一个 md5,

这样,你可以在服务器端实现一个 rest api,游戏运行时先去服务器上请求所有bundle的最新版本号。然后传到 loadBundle 里面。这样就可以连 settings.js 也不更新了

反馈一个小问题, 资源目录从res变成assets了。导致之前的热更工具version_generator.js 需要更改下路径了。

“bundle的md5是记录在settings.js里面”
settings.js是在项目发布时生成的吧。那如果是另外一个项目去加载这个bundle,在自己的settings.js里面其实是找不到这个bundle的md5信息的(文档里面说bundle可以跨项目复用),此时如果调用loadBundle没有传递版本号,是去下载服务器上最新的版本了么,还是说必须从服务器获取一个版本号才能够正常工作。

编辑器太容易崩溃了
尤其是在打开编辑器的时候:12:

了解,我们正在改

能看到具体报错么

就是说必须要打包出来才能看效果,不能预览。。。

对的

此时如果调用loadBundle没有传递版本号,是去下载服务器上最新的版本了么,还是说必须从服务器获取一个版本号才能够正常工作。

在调用loadBundle的时候不传版本号的话, 就会默认去settings里面匹配,但是你现在是跨项目复用,所以匹配不到,最后加载应该会出现问题。所以你还是需要一个最新的版本号传给loadBundle,可以在服务器上取,也可以写死在代码里面

抱歉,怎么说呢,你把 loadBundle 想做是去服务器上请求一个资源,现在服务器上没有这个资源,自然就加载不到。在预览的时候编辑器也不能直接去构建 AssetBundle,这会导致预览太慢了,我们后续会尝试通过其他方向来优化这一点。比如说,可以支持单个bundle进行构建,这样需要调试那个构建那个就行

了解,多谢解答。

在哪看报错???
我这的表现是

打开编辑器
都看到编辑器界面了
但是此时编辑器里啥都点不了
十几秒之后
编辑器就闪退了

不闪退的情况下
看到这个

能不能预览的时候去加载本地已经构建好的bundle么。 还有就是比如 子游戏 怎么实现差异更新呢,也需要配置一个类似manifest的配置文件 对比所有文件的MD5 来更新么

这个报错
是我用法不对吗???

复现代码.rar (310.6 KB)

构建win32工程
来回点击按钮

能不能预览的时候去加载本地已经构建好的bundle么

这个应该可以的

还有就是比如 子游戏 怎么实现差异更新呢,也需要配置一个类似manifest的配置文件 对比所有文件的MD5 来更新么

如果你子游戏的bundle放服务器上的话,只用勾选 md5 cache 就行. 每个 bundle 里面都有一个config.json,其实就是manifest,不需要你再额外配置

如果你子游戏也放在包内的话,那就用之前热更新的方式,配置一个 manifest 来做更新

好的谢谢:grinning:

不是很清楚具体的操作,有示例可以参考吗