制作一个承载想法的东西(十一)—— 针对六章节《使用Addressables进行热更新》补充

  • A+
所属分类:Unity3d

在六章节中,讲了一键标志地址、自定义打包、自定义加载方式等把热更放在启动时可以检测,还写了修改资源远程加载的地址。大部分接口和自定义都准备好了,但是没有把流程走完,只是列了下热更的流程,下面把这些流程走完,并且在lua侧去控制热更,还有热更完成后的重启操作等。

更新流程在六章节的基础上,第一步改为拉取一个Version配置文件,确定需要更新了再设置catalog和资源的下载地址,所以流程为:

  1. 检查版本信息
  2. 设置加载资源的远程路径,catalog和Bundle
  3. 检查网络资源表catalog
  4. 下载网络资源表catalog
  5. 通过全局资源lable后去所有的ResourceLocation
  6. 自定义辨别筛选出需要更新Bundle资源的ResourceLocation
  7. 获取下载的大小
  8. 更新下载
  9. 完成后的重启

 

一、准备

一、Addressable的接口准备

在前面,先列出调用的接口提供给lua层调用,并在AddressableManager.lua中去统一调用,这里的接口主要针对Addressable的热更的接口。

 

 

二、检查版本接口准备

在本地的Resources目录下,放一个文本的配置文件,用json格式记录App版本号和Res版本号,App版本号不对,就进行对应的整包更新。资源版本号对不上就进行资源更新。更新完成后会保存一个新的版本配置文件到黑匣子存储目录下。所以,获取本地版本的方法就是先判断黑匣子中是否有配置文件信息,没有再加载Resources下的。下面是获取和保存版本信息的接口。

 

三、重启接口准备

在c#中主要是重启lua虚拟机和释放预加载的lua缓存,重启的方法为ReBoot方法。

 

二、lua侧实现热更流程

框架启动之后,会加载Update场景,在Update场景中会打开UpdatePanel的UI窗口界面,热更的流程就在UpdatePanel中完成。

 

更新流程首先是检查的版本号,对于版本号对不上的,无论是远程版本大还是小,都需要进行更新,这样可以做版本回退。而远程地址的拼接,不难看出,远程的目录为“版本号/平台”,远端保存多个版本号的所有资源,可以任意的回退到任何版本。

当下载完成后,在FinishUpdate中,更新版本信息。然后重启,需要关闭所有的界面,这里会产生黑屏,所以我会在Main场景中留一个渲染模式为Scene Space - Overlay的底图,当需要关闭界面的时候先显示这个底图而不至于黑屏。销毁所有资源,因为资源可能是旧的了,最后调用c#提供的方法,重新加载最新的lua脚本和重启lua虚拟机。

 

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: