一、常规做法:
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()中,开始检查更新一开始的入口
VersionFileManager.InitCDNVersionFile()。获取CDN上的资源版本号。
HotfixManager.CheckAndDownload。检查对应的版本号中的MD5文件。
后面加载gameentry.prefab,然后执行上面对应的GameEntry脚本,执行上面的Procedure.Init()。Procedure状态机里有一个CheckVersionChange。进入到CheckVersionManager.BeginCheckVersionChange(),逐一比较资源MD5并下载资源。