游戲上線后,遇見bug或者需要更新內(nèi)容(包括資源竿音,玩法和屎,數(shù)值調(diào)整,游戲腳本等)的時候春瞬,一般有2種做法柴信。第一種,發(fā)個新包宽气,然后讓玩家下載新的版本随常;第二種,在游戲內(nèi)更新萄涯,游戲啟動時去下載需要更新的資源绪氛。第一種我們一般稱為游戲大版本更新,第二種稱為熱更新涝影。
一般來說钞楼,不能通過小版本更新解決的問題,才會用到大版本更新袄琳,例如询件,不可熱更的游戲代碼。而熱更新是建立在每次大版本更新的基礎(chǔ)上進行的更新唆樊,因此惩阶,這2種更新方式應該互相承接悯仙。
我們可以通過版本文件和更新文件以及版本號來實現(xiàn)大版本更新和熱更新。游戲的版本號由大 版本+資源版本?構(gòu)成,每一次大版本更新俐填,大版本號增加,資源版本號重置橙数。每一次熱更新激况,大版本號不變,資源版本號增加淀衣。
版本文件(MD5File)記錄每一個資源的MD5值昙读。
例如:
a.txt,1630d23f45464df6071a9948dd1592bf
b.texture,f9c985a8f2a86292a024c4ed21ed33fb
更新文件(UpdateFile)記錄每一個更新文件的資源版本號,資源版本號對應玩家去服務器上哪個版本庫里下載資源膨桥。
例如:
a.txt,0.1
c.txt,0.2
大版本更新流程:
1.清除之前的版本文件和更新文件
2.打包所有的資源
3.計算每個資源的MD5值蛮浑,創(chuàng)建新的版本文件,將所有資源的資源名稱和對應的MD5值保存在版本文件中只嚣。
熱更新流程:
1.打包所有資源
2.計算每個資源的MD5值沮稚,并和版本文件中記錄的MD5值做比較,將MD5值發(fā)生變化的資源和被刪除的資源記錄下來册舞。
3.
如果不存在更新文件蕴掏,即現(xiàn)在是在大版本后的第一次熱更新,創(chuàng)建一個更新文件调鲸,將所有MD5值發(fā)生變化的資源的名稱和其版本號記錄在更新文件中,格式為為【文件名盛杰,當前資源版本號】。
如果已經(jīng)存在更新文件线得,即現(xiàn)在是在上一次熱更新之后繼續(xù)熱更新饶唤。首先讀取上一次的更新文件,然后遍歷本次MD5值發(fā)生變化的資源贯钩,如果資源名稱在更新文件中存在募狂,則將更新文件中該資源版本號置為當前版本;如果資源名稱在更新文件中不存在角雷,則在更新文件中添加新的記錄祸穷,存放其資源名稱和當前資源版本號;如果更新文件中存在被刪除的資源名稱勺三,將該資源的記錄從更新文件中移除雷滚。
4.上傳需要更新的資源和更新文件(UpdateFile)到服務器
5.刪除原來的版本文件,將所有資源的MD5值保存在新的版本文件中吗坚。
玩家進入游戲后祈远,首先判斷是否需要更新版本呆万,如果是大版本更新,則提示需要重新下載安裝包车份;如果是小版本更新谋减,則先下載更新文件(UpdateFile),然后根據(jù)更新文件中的資源名和版本號去對應的地址下載資源扫沼。
服務器下載目錄結(jié)構(gòu)
UpdateFile.txt
0.1(資源版本號文件夾)
-------a.txt
0.2(資源版本號文件夾)
-------a.txt
-------c.txt
0.3(資源版本號文件夾)
-------a.txt
-------d.txt
假設(shè)UpdatFile.txt內(nèi)容為:
a.txt,0.3
c.txt,0.2
d.txt,0.3
如果玩家的版本是0.1出爹,則玩家需要去0.3的目錄下下載a.txt和d.txt,去0.2的目錄下下載c.txt.缎除。
如果玩家的版本是0.2严就,則玩家只需要去0.3的目錄下下載a.txt和d.txt。
通常會在客戶端緩存玩家下載過的資源和版本號器罐,然后與updateFile文件做對比梢为,生成需要下載的文件列表,然后去服務器下載即可技矮。