此前研究了一下基于AsssetBundle 进行热更新的方案,首先能够肯定的时,方案是可行的。 但使用过程中也发现了一些问题,希望能够得到引擎组的解答和支持。
1. API 补充:
希望AssetManager 增加 获取所有Bundle 名称列表的接口:cc.assetManager.getAllBundles();
**用途:**遍历游戏所有Bundle列表,以便进行预下载Bundle资源,优先运行时效果。
2. 缓存资源效率优化:
每个版本的热更资源一般会在远端文件存储时按版本区分下载目录,这会导致热更时传递给 assetManager 的 remoteServerUrl 地址经常会更换。 但通常情况下,某个Bundle 的两次热更版本仅会有很少部分资源变更,大部分资源都是与上一版本相同的。 实际测试发现,当remoteServer 地址变更时,Bundle会无法复用之前版本的已下载资源,而会全量下载整个Bundle的所有资源。
期望: Bundle中的缓存资源查找策略能够可选性的忽略远程服务器路径。仅以BundleName+res+md5 做为缓存查找的依据。
**用途:**在热更新时,一个Bundle中大部分资源都是不用重新下载缓存的,在热更时仅下载那些md5变化了的资源,而忽略缓存中已有资源。
3. 需求:在运行时,只下载某Bundle的更新版本资源,而不加载Bundle对象。
通常情况下,在运行时想要后台静默下载Bundle的更新资源。 但目前Bundle 必须要先获取到Bundle对象后才能调用预下载资源等接口进入资源更新。
**期望:**能够在一个隔离执行环境下,加载、运行更新的Bundle对象,并可能提前执行预下载操作。而不会与当前已实例化的同名Bundle产生冲突。

