五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

huatuo 革命性熱更新解決方案系列:huatuo示例項目源碼分析與啟發(fā)

2022-12-01 21:07 作者:游戲開發(fā)RAIN  | 我要投稿

上一節(jié)我們安裝huatuo的開發(fā)環(huán)境,然后運行示例項目,體驗了huatuo做熱更新,這節(jié)課我們來分析示例項目的源碼,掌握huatuo做熱更新的主要的步驟,讓你自己的項目很好的基于huatuo來組織熱更新。有幾個huatuo的原則要清楚:

(1)Unity ADF機制來分項目,可以分成若干項目,避免大量代碼長時間的編譯,同時可以按照更小的顆粒度來做熱更新。

(2)普通開發(fā)中,會把Unity項目的代碼通過IL2CPP全部轉(zhuǎn)成靜態(tài)的二進制指令代碼,如果當IL2CPP_huatuo加載了一個IL代碼的.dll(既有AOT的靜態(tài)代碼,又裝載了對應的IL代碼),huatuo會優(yōu)先解釋執(zhí)行裝載的IL代碼。每個版本都把.dll生成出來,進行比對,哪些.dll變化了,就采用il2cpp_huatuo下載下來,轉(zhuǎn)載執(zhí)行即可。

(3)任何項目的代碼(框架代碼+游戲邏輯)都可以基于huatuo來做熱更新。

(4)huatuo提供熱更的機制,至于如何熱更,熱更哪些完全由自己控制;

我們帶著這些原則來對示例項目來做源碼分析得到自己開發(fā)項目中的啟發(fā)。

啟發(fā)1:?游戲代碼如何分工程與項目

傳統(tǒng)的我們的熱更新項目會分為:框架代碼+游戲邏輯。你也可以按照這個標準來劃分,也可以繼續(xù)分更小的顆粒度,比如游戲邏輯,可以拆分為:戰(zhàn)斗,任務等。所以我們在使用huatuo做熱更新的時候它首先做的是項目拆分,示例代碼中利用Unity 的ADF機制,將項目分成了幾個工程如下:

Assembly-CSharp.csproj:默認的代碼工程,新建代碼默認會被拉入到這個工程編譯;

Assembly-CSharp-Editor.csproj:編輯器Editor代碼會被拉入到這個工程編譯;

BetterStreamingAssets.csproj: 示例項目中的資源ab包加載工程;

HotFix.csproj: 示例項目中測試熱更的測試工程;

HotFix2.csproj: 示例項目中的第二個測試工程;

Main.csproj: 示例項目中入口主工程,示例項目從這個入口工程的代碼開始運行;

這里給到我們的啟發(fā),我們在做自己游戲項目的時候,也可以根據(jù)自己的項目需求利用Unity ADF機制,來將項目劃分稱若干工程,而這些工程,可以單獨的生成IL的.dll代碼指令。這樣就可以給IL2CPP_huatuo來解釋執(zhí)行了。由這里得到的啟發(fā),我們用huatuo做項目的時候我會將項目如下劃分,供大家參考:

Assembly-CSharp.csproj:默認的代碼工程,這里放啟動代碼,放熱更新版本檢測代碼,檢測出來哪些.dll需要更新,基于增量下載更新,比較出哪些不用更新使用原來自帶的AOT內(nèi)部的代碼,哪些需要更新,需要更新的用il2cpp_huatuo來裝載進來,優(yōu)先執(zhí)行裝載進來的.dll指令。

Main.csproj:可以用來做框架工程,實現(xiàn)各個框架模塊,初始化框架,進入具體游戲邏輯,提供基礎的服務,如SDK服務等。這個是傳統(tǒng)熱更的框架層,一般情況下不用熱更,使用AOT后的代碼就可以了,如果萬一要熱更,也可以直接熱更生成的main.dll。

若干業(yè)務邏輯項目工程: 根據(jù)游戲的類型來進行區(qū)分若干游戲項目,根據(jù)版本比對決定這些.dll是否需要被il2cpp_huatuo虛擬機裝載。

啟發(fā)2:?擴展編輯器來生成所有.dll

由huatuo的特性,你裝載哪個.dll,就可以動態(tài)解釋執(zhí)行對應的.dll的代碼指令。所以我們就可以得到啟發(fā),把我們項目中所有的除Assembly-CSharp.dll以外的.dll都生成出來。比如1.0版本: Main.dll(游戲框架), game.dll(游戲主邏輯), task.dll(任務系統(tǒng)), … 比如2.0版本: main.dll, game.dll, task.dll, …。這樣每次打包發(fā)布的時候,我們就可以使用這個編輯器擴展,編譯出來所有的項目中的.dll,并生成一個所有.dll的md5文件變化列表。把最新的一份.dll與md5文件列表放服務器,把本地md5文件列表放包里,每次運行,我們增量下載最新版本的.dll后,我們只要比較服務器上的.dll md5文件列表,與當前版本對應.dll的md5文件列表,決定出哪些.dll需要裝載進入il2cpp_huatuo,就直接裝載即可實現(xiàn)熱更新,那些沒有變化的.dll,表示可以直接使用AOT模式下的機器指令,不用熱更解釋執(zhí)行IL指令的.dll。我們來看下示例項目里面是如何編譯我們的.dll指令的,參考對應的編輯器的擴展代碼。打開示例項目的Editor/Huatuo文件夾的EditorHelper.cs, 如圖

今天的分享就到這里了, 關注我, 接下來還會繼續(xù)更新huatuo熱更的系列教程。

huatuo 革命性熱更新解決方案系列:huatuo示例項目源碼分析與啟發(fā)的評論 (共 條)

分享到微博請遵守國家法律
扬中市| 东台市| 桦甸市| 武平县| 阿克| 伊宁市| 青龙| 小金县| 会东县| 耒阳市| 定远县| 齐齐哈尔市| 屏山县| 安新县| 武定县| 龙州县| 洛宁县| 蚌埠市| 突泉县| 洛南县| 苍梧县| 九江县| 黔南| 佛冈县| 颍上县| 南和县| 得荣县| 泗洪县| 樟树市| 和硕县| 洛宁县| 彩票| 通城县| 北辰区| 郸城县| 顺平县| 阜城县| 柳州市| 通州区| 穆棱市| 吉首市|