最小化启动,Main场景+Manifest文件,即可启动游戏,剩下资源可以全部运行时下载。基于异步的API设计,支持async/await,使边玩边下更从容。

更新策略

没有补丁的概念,资源服上的资源一定是最新的,只根据remote和local的manifest清单,对比出需要下载的文件。

  1. 游戏启动时,local和remote的manifest,对比差异,下载差异资源,remote manifest覆盖local
  2. 边玩边下时,manifest清单里有资源记录,如果本地没有资源,便会去remote下载
  3. 每次更新资源时,是覆盖资源服目录,旧的文件不要删掉

Issue

Q. 资源修改后,local的manifest信息会旧,例如size,hash都会变,和remote的资源对不上,下载会报错
A. 需要保证资源更新开启,这样会自动下载差异资源

Q. v1进游戏,什么都没有,需要加载更新界面UI,v2版本修改了更新界面UI,删掉了一些组件,v1的代码使用v2的资源就会报错
A1. 需要保证 资源更新等一些ui,都在包里,那么引申一个出新问题,如何确定首包内容
A2. 使用append_hash,v1、v2的资源名就不一样了,那么v1的代码,先加载v1的资源,通过资源更新,更新为v2的资源,这种则可以达成首包最小化,只需一个manifest文件

Q. 如何确定首包内容?
A. 可以将某些buildGroup的资源的ab归为初始包,类似与addressable的buildIn group

Q. 断点续传问题,v1版本的资源下一半,v2版本,更新了,就不能接着下了
A. 对比版本号,不一样时,清理cache

Q. 资源更新完毕,才启动脚本环境?
A. 准备尝试huatuo了,需要跟进

Q. app覆盖安装时,怎么最大化保留正确资源,避免重复下载
A. 判断app版本号,不同时,检测remote manifest,扫本地资源,asset名字相同,hash相同,则可以保留,其余全部删除

Q. The AssetBundle ‘xxx.bundle’ can’t be loaded because another AssetBundle with the same files is already loaded.
A. 从没有appendhash,转为appendhash后,因载入了部分内容相同,但名字不一样的ab,热更新完成后,需要卸载掉bundle,调用unload(false)

Q. 下载到临时目录的必要性?
A1. 如果认定为资源完整,但一部分bundle下载失败,就会加载报错。目前,下载会校验所有下载文件,且全部成功才会覆盖local manifest,理论上不会出现问题。
A2. 如果需要压缩,则一定是下载到临时目录去,下载成功,再解压。