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

rc.9版本,配置bundle时,切换target platform不应该触发revert/apply按钮

另外希望尽快实现压缩,文件多的项目减少网络请求次数优化很大

我建了一个空项目做了一些测试,对于 Bundle 和自动图集, zip,纹理压缩有一些点感觉可以说明:

1.当有 bundle A 和 B,两个 bundle 中都有自动图集,A 优先级比 B 大,A 中的预制体引用了 B 中的某张图片,图片会被构建在 bundle A,但是 bundle A 的自动图集不会包括这张图片,如果 A 和 B 的优先级一样,也是不会包括这张图片,但其实想可以控制打在某张图集中

2.两个自动图集我都选上了纹理压缩,构建后那张 A 中预制体引用的 B 图片也生成了压缩纹理,那么这张图片既没有打进任何一个图集中,也没有设置纹理压缩,它纹理压缩用的是哪个自动图集的设置?

3.还有一个是 zip 和纹理压缩的建议,是否可以尝试打出多个 zip包,每个包用不同格式的纹理,否则纹理都在一起, zip 包很大,两个组合后的可用性不高

这些功能组合起来的具体逻辑希望在文档中会说明

https://docs.cocos.com/creator/2.4/manual/zh/asset-manager/bundle.html?h=bundle

文档我看过,没有涉及到我上面说的三个问题,关于纹理压缩,自动图集在 bundle 中的表现和处理逻辑

不是小游戏的子包,而是把资源放到CDN上,就像官网的说明一样。

以前通过这种方式,需要什么就下载什么,而且新进入一个场景,需要下载资源,还可以用preloadScene预加载,并获得进度。现在资源都成了bundle了,放到CDN上的也是bundle,就没法这么玩了吗?

有办法修改main bundle优先级吗 想把优先级提到比resources高

也是可以的,配置这两个之后,把remote放在服务器上就行了,

目前应该没办法,这个需求用来做啥呢

我的微信小游戏主要只有两个场景 一个初始场景 一个main场景 我打算main bundle发布成子包的,resources是发布成远程的,我希望游戏加载到main场景的时候 都是通过微信子包的形式 这样会比较稳定 但是main场景有一些依赖了resources里面一些资源,目前的话,main依赖的一些资源会被打包到resources bundle里面 ,进入main的时候 还是要先去远程下载一下。

2.4是不是2d的最后一个大版本了 以后只是小版本更新

有道理,之后我们再完善下文档,就我个人来说的话,我不太建议这么设置。A 中的预制体引用了 B 中的资源,但是 A 的优先级比 B 高。我个人不太建议这么设置。我个人建议,越独立的资源放优先级更高的 bundle,比如图片,音频。越不独立的,比如 prefab 和 scene,放较低优先级的bundle。这样低优先级的 bundle 就可以尽可能复用独立的资源。你说的这个情况,可能把预制体引用到的图片直接放在 A 里面会比较好,这样 A 就是自我完整的了;或者把 B 的优先级调整到比 A 高,这样低优先级A依赖高优先级B也是合理的。

2.两个自动图集我都选上了纹理压缩,构建后那张 A 中预制体引用的 B 图片也生成了压缩纹理,那么这张图片既没有打进任何一个图集中,也没有设置纹理压缩,它纹理压缩用的是哪个自动图集的设置?

因为 A 中的 prefab 引用了 B 中的图片,而且 A 优先级较高,所以 A 把 B 中的图集都挖过去了,所以压缩纹理的设置用的是 B 的设置

3.还有一个是 zip 和纹理压缩的建议,是否可以尝试打出多个 zip包,每个包用不同格式的纹理,否则纹理都在一起, zip 包很大,两个组合后的可用性不高

这个可能比较麻烦,目前没有想到好的方式,这样也会产生一些不舒服的问题,或许可以定制一下,现在定制也很方便的

不一定,看具体情况把

其实不解决也没事,因为加载 resources bundle 的时候,只是去下载了 config.json, 这个文件应该不是很大,所以不是特别耗。不过如果你想要性能最优的话,那我建议你可以不用 resources 了,你把resources 改成其他名字,作为你自定义的 bundle,这样就能把优先级调到比 main 高了。

谢谢解答,并且现在我觉得第 1 点只要将资源划分做得更细更精致,这种情况的确是不会发生的。

现在只能这么处理了 ,主要是用resource的话 之前的一些loadres接口暂时可以不用改,自己建一个的话 就得修改这些接口

哦,是的,抱歉

我们正在评估远程assetbundle是否能替代原生的热更系统,遇到个问题:为了避过苹果的审核政策,第一个版本的远程bundle也要放到包里,但是不知道怎么加载。

麻烦问下引擎加载远程bundle时判断是用本地缓存还是去远程下载的代码在哪里?我们去看看有没有思路

我们正在评估远程assetbundle是否能替代原生的热更系统

其实是可以替换的,之前设计的时候就考虑过这点

麻烦问下引擎加载远程bundle时判断是用本地缓存还是去远程下载的代码在哪里?我们去看看有没有思路

可以参考下downloadBundle 的代码
https://github.com/cocos-creator-packages/jsb-adapter/blob/v2.4.0-release/engine/jsb-loader.js#L170

bundle A下单独放一个cc.Component的脚本,bundle B 如果不先loadBundle(“bundleA”)是无法使用A下面的component,这和我预想的一样,但如果removeBundle(bundleA")后,并释放A,A下面的component还能再使用吗?

可以的,代码和资源不太一样,代码加载了之后无法remove掉,除非重启