YouYou框架:1、热更模块

一、常规做法:

1、从本地读取版本号
2、读取服务器上的资源版本号
3、如果客户端本地的资源与服务端的资源包版本号一样,直接进入游戏。
5、如果不一样。读取本地的资源文件列表。
6、同时,读取远端的资源文件列表。
7、通过文件MD5值,比较两个文件列表,把不同的生成到这个数组里面。
8、根据要下载的资源数组列表,判读是否在已经下载完成的文件列表里。有则不用下载。
注意点:在传统的热更里,代码也可以打包成byte资源,从而把代码也当初一种ab包资源。

二、HybridCLR热更

YouYou框架里使用的是HybridCLR方式进行热更的。框架中整体的更新流程如下。

一、代码热更部分。
1、检查负责热更代码的ab包资源是否需要更新,通过资源包的MD5值去比较。
比如这个包的资源名称就叫hotfix.assetbundle。
2、如果没有变化,则不用更新,如果有变化,则进行这个资源的更新。

二、资源热更部分。
1、先更新完代码,然后再进行资源部分的增量热更。
2、先判断本地是否有版本文件,如果没有,则直接进行初始资源的下载。
3、如果本地可写区有版本文件,并且本地资源的版本号==CDN上的资源版本号。则进入到预加载资源流程。
4、如果本地可写区没有版本文件,或者本地资源的版本号!=CDN上的资源版本号,则进入到资源更新检查流程。
5、通过MD5方式比较的方式,找出资源列表中需要更新的资源。
6、删除旧资源,下载新资源。

三、比如说本地的资源版本号提升了,提升到了更高的版本?
1、如果仅仅只是在打包的时候提升了打包资源的版本号,而在代码中没有改变对应的版本号,则是不行的。
2、如果想对打包资源进行更新,同时还希望提升版本号,因为这样做,才能准确做资源区分,这样子想做回滚的时候,才能方便地回滚到原来的版本,而不是直接覆盖。

三、框架里的代码流程

1、Scene_Launch作为启动场景。执行MainEntry.cs脚本。

  • 初始化各类启动参数。
    2、主要更新脚本
  • DownloadManager.Init()
  • CheckVersionManager.Init()
  • HotfixManager.Init()
  • Procedure.CheckVersion()

HotfixManager.Init()中,开始检查更新一开始的入口


1.png

VersionFileManager.InitCDNVersionFile()。获取CDN上的资源版本号。


2.png

HotfixManager.CheckAndDownload。检查对应的版本号中的MD5文件。


3.png

后面加载gameentry.prefab,然后执行上面对应的GameEntry脚本,执行上面的Procedure.Init()。Procedure状态机里有一个CheckVersionChange。进入到CheckVersionManager.BeginCheckVersionChange(),逐一比较资源MD5并下载资源。


4.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容