一、常規(guī)做法:
1、從本地讀取版本號(hào)
2、讀取服務(wù)器上的資源版本號(hào)
3、如果客戶端本地的資源與服務(wù)端的資源包版本號(hào)一樣,直接進(jìn)入游戲。
5、如果不一樣。讀取本地的資源文件列表。
6、同時(shí),讀取遠(yuǎn)端的資源文件列表。
7、通過(guò)文件MD5值,比較兩個(gè)文件列表,把不同的生成到這個(gè)數(shù)組里面。
8、根據(jù)要下載的資源數(shù)組列表,判讀是否在已經(jīng)下載完成的文件列表里。有則不用下載。
注意點(diǎn):在傳統(tǒng)的熱更里,代碼也可以打包成byte資源,從而把代碼也當(dāng)初一種ab包資源。
二、HybridCLR熱更
YouYou框架里使用的是HybridCLR方式進(jìn)行熱更的。框架中整體的更新流程如下。
一、代碼熱更部分。
1、檢查負(fù)責(zé)熱更代碼的ab包資源是否需要更新,通過(guò)資源包的MD5值去比較。
比如這個(gè)包的資源名稱(chēng)就叫hotfix.assetbundle。
2、如果沒(méi)有變化,則不用更新,如果有變化,則進(jìn)行這個(gè)資源的更新。
二、資源熱更部分。
1、先更新完代碼,然后再進(jìn)行資源部分的增量熱更。
2、先判斷本地是否有版本文件,如果沒(méi)有,則直接進(jìn)行初始資源的下載。
3、如果本地可寫(xiě)區(qū)有版本文件,并且本地資源的版本號(hào)==CDN上的資源版本號(hào)。則進(jìn)入到預(yù)加載資源流程。
4、如果本地可寫(xiě)區(qū)沒(méi)有版本文件,或者本地資源的版本號(hào)!=CDN上的資源版本號(hào),則進(jìn)入到資源更新檢查流程。
5、通過(guò)MD5方式比較的方式,找出資源列表中需要更新的資源。
6、刪除舊資源,下載新資源。
三、比如說(shuō)本地的資源版本號(hào)提升了,提升到了更高的版本?
1、如果僅僅只是在打包的時(shí)候提升了打包資源的版本號(hào),而在代碼中沒(méi)有改變對(duì)應(yīng)的版本號(hào),則是不行的。
2、如果想對(duì)打包資源進(jìn)行更新,同時(shí)還希望提升版本號(hào),因?yàn)檫@樣做,才能準(zhǔn)確做資源區(qū)分,這樣子想做回滾的時(shí)候,才能方便地回滾到原來(lái)的版本,而不是直接覆蓋。
三、框架里的代碼流程
1、Scene_Launch作為啟動(dòng)場(chǎng)景。執(zhí)行MainEntry.cs腳本。
- 初始化各類(lèi)啟動(dòng)參數(shù)。
2、主要更新腳本 - DownloadManager.Init()
- CheckVersionManager.Init()
- HotfixManager.Init()
- Procedure.CheckVersion()
HotfixManager.Init()中,開(kāi)始檢查更新一開(kāi)始的入口

VersionFileManager.InitCDNVersionFile()。獲取CDN上的資源版本號(hào)。

HotfixManager.CheckAndDownload。檢查對(duì)應(yīng)的版本號(hào)中的MD5文件。

后面加載gameentry.prefab,然后執(zhí)行上面對(duì)應(yīng)的GameEntry腳本,執(zhí)行上面的Procedure.Init()。Procedure狀態(tài)機(jī)里有一個(gè)CheckVersionChange。進(jìn)入到CheckVersionManager.BeginCheckVersionChange(),逐一比較資源MD5并下載資源。
