Unity3D游戲 CSHotFix熱更新框架使用指南

簡(jiǎn)介:手把手的圖文講解CSHotFix結(jié)合ILRuntime進(jìn)行unity3d游戲的c# 注入更新戰(zhàn)斗邏輯bug和新增成長(zhǎng)功能界面邏輯的熱更新方式娶耍,力爭(zhēng)做到用c#就可以安安心心寫代碼,用virtual studio2015就可以快速高效的編程。?

1、整合ILRT。

2肛宋、注入C#,修復(fù)bug束世。

3酝陈、新增功能。

1毁涉、整合ILRT到Unity3D沉帮。

下載https://github.com/qq576067421/cshotfix工程,里面有主要需要關(guān)注的文件夾是“InjectorEditor”贫堰,“UnityDemo”穆壕。

先講UnityDemo。這個(gè)是一個(gè)Unity3d游戲的框架其屏,打開到如下路徑喇勋,你會(huì)看到我們已經(jīng)為你整合了一個(gè)pdb2mdb的工具,一個(gè)HotFixDll的熱更新工程偎行,和一個(gè)Assets文件夾川背。其中pdb2mdb是用來把vs的pdb調(diào)試文件轉(zhuǎn)換為mdb的mono用的。HotFixDll就是我們平時(shí)寫成長(zhǎng)邏輯睦优、修復(fù)戰(zhàn)斗bug的c#工程渗常。(圖片丟失了,我是從Word復(fù)制進(jìn)來的汗盘,你也可以從這個(gè)地址下載Word文檔查看

進(jìn)入Assets皱碘,可以看到有CSHotFixLibaray和ILRuntime,前者是用于注入的生成代碼和測(cè)試用例隐孽;后者是ILRuntime1.2的庫文件癌椿。如果你沒有或者需要最新版的ilrt你可以從https://github.com/Ourpalm/ILRuntime下載最新版本健蕊。

下面講解下怎么整合ilrt。

首先定義一個(gè)類IGameHotFixInterface?,你可以在unity工程找到我已經(jīng)為你定義好的該類踢俄,里面定義了一些抽象函數(shù)缩功,用于在熱更新工程繼承。你也可以根據(jù)自己的需要自行定義都办,例如我可能會(huì)增加一個(gè)熱更新工程訪問android的接口string CallPlatform(string,object)

? ? ? ?然后新增一個(gè)被稱為IGameHotFixInterfaceAdapter的類嫡锌,該類你也可以在unity工程找到,它的作用是定義一個(gè)“跨域”訪問類的適配器琳钉。大家可以依葫蘆畫瓢势木。里面有注釋的,簡(jiǎn)單明了歌懒。

隨后啦桌,需要定義一個(gè)加載熱更新代碼的類,我這里命名為HotFixDllLoader及皂,出于演示的方便甫男,我用了一個(gè)TextAsset,把熱更新的dll的后綴添加bytes验烧,然后掛上去的板驳,這個(gè)如有不明白,可以自行百度噪窘。定義ilrt的APPDomain和IGameHotFixInterface字段笋庄。下面圖中詳細(xì)說明了代碼含義:

下面的代碼就是測(cè)試演示程序。

????void?Start?()

????{

????????Init();


????????Debug.Log("開始熱更新測(cè)試");

????????int?i = 15;

????????float?o = 0;

????????LCL.MainTestmt =?new?LCL.MainTest();

????????mt.Test2(i, o);

????????Debug.Log("結(jié)束熱更新測(cè)試");

????}


最后倔监,新建一個(gè)MainTest的類直砂,新建一個(gè)ClassPrivateTool的類用于訪問類的私有成員、字段等等浩习。需要留意的是ILRuntimeCLRBinding里面的內(nèi)容静暂。

好了ilrt基本已經(jīng)整合進(jìn)來了。


2谱秽、了解注入工具洽蛀。

注入工具目前來說弄得稍微簡(jiǎn)單了點(diǎn),需要各位多多貢獻(xiàn)代碼來使得他更加方便疟赊。當(dāng)然基本功能已經(jīng)滿足郊供。

首先進(jìn)入InjectorEditor\bin\Debug目錄,找到并雙擊InjectorEditor.exe近哟,


其中配置文件在同目錄的ini.txt 配置的路徑請(qǐng)參照我上面的配置就可以了驮审。你的有可能是盤符不一樣。另外這里最好弄成相對(duì)路徑,當(dāng)然需要你貢獻(xiàn)點(diǎn)代碼啦疯淫。

怎么操作呢地来?

1、修改init.txt熙掺,

2未斑、點(diǎn)擊“加載配置”,

3币绩、點(diǎn)擊“生成委托”蜡秽,此時(shí)會(huì)生成一些文件到UnityDemo\CSHotFixDemo\Assets\CSHotFixLibaray\DelegateGen路徑下面,文件是LCLFunctionDelegate.cs类浪,

4载城、卻換到unity3d編輯器等待它編譯完成。

5费就、編譯完成后回到“注入編輯器”,

6川队、點(diǎn)擊生成變量力细,這里的變量是我們用委托定需要進(jìn)行熱跟新的函數(shù)的全局靜態(tài)變量,留意有文件生成固额,

7眠蚂、切換到unity等待編譯。

8斗躏、編譯完成后切換會(huì)本編輯器逝慧。

9、點(diǎn)擊注入代碼按鈕啄糙。此時(shí)代碼注入完成笛臣。

10、使用ILSpy工具查看注入結(jié)果隧饼。自行下載ILSpy沈堡,使用方法大致是,把Assembly-CSharp.dll也就是unity自動(dòng)生成的代碼程序集拖入到ILSpy找到LCL命名空間下面的代碼燕雁,如下圖

此時(shí)诞丽,你可以看到右邊那個(gè)箭頭,我們已經(jīng)注入成功拐格。

11僧免、如果你的邏輯里面有一個(gè)地方錯(cuò)了,形如上圖的public void Test2(int a, float b)函數(shù)錯(cuò)了捏浊,那么記錄下LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate這個(gè)變量懂衩。

12、打開熱更新工程,如下圖:



13勃痴、留意該工程是否正常引用了unity的Assembly-CSharp谒所。

14、找到該工程唯一文件的如下代碼

????????public?override?void?Start()

????????{

m_Instance =?this;

????????????//注冊(cè)需要修復(fù)的bug

????????????LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate += OnHotFixTest;


????????}


????????private?void?OnHotFixTest(objectarg0,?intarg1,?float?arg2)

????????{

????????????Debug.Log("修復(fù)一個(gè)bug arg1:"+arg1+"arg2:"+arg2);

????????}

此時(shí)你可以發(fā)現(xiàn)LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate += OnHotFixTest代碼已經(jīng)有vs編輯器的智能提示沛申。

15劣领、為他添加一個(gè)+=的相應(yīng)函數(shù),委托的一般用法铁材。這里我添加的是OnHotFixTest函數(shù)尖淘。

16、至此注入的用法完畢著觉。


3村生、新增功能。

新增功能的比較簡(jiǎn)單饼丘,只需要在上面的熱更新工程里面寫各種代碼就可以了趁桃,里面包含了完整的init,update和destroy邏輯接口肄鸽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卫病,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子典徘,更是在濱河造成了極大的恐慌蟀苛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逮诲,死亡現(xiàn)場(chǎng)離奇詭異帜平,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梅鹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裆甩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帘瞭,你說我怎么就攤上這事淑掌。” “怎么了蝶念?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵抛腕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我媒殉,道長(zhǎng)担敌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任廷蓉,我火速辦了婚禮全封,結(jié)果婚禮上马昙,老公的妹妹穿的比我還像新娘。我一直安慰自己刹悴,他們只是感情好行楞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著土匀,像睡著了一般子房。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上就轧,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天证杭,我揣著相機(jī)與錄音,去河邊找鬼妒御。 笑死解愤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乎莉。 我是一名探鬼主播送讲,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惋啃!你這毒婦竟也來了李茫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤肥橙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秸侣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體存筏,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年味榛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椭坚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搏色,死狀恐怖善茎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情频轿,我是刑警寧澤垂涯,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站航邢,受9級(jí)特大地震影響耕赘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膳殷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一操骡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦册招、人聲如沸岔激。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虑鼎。三九已至,卻和暖如春冀惭,著一層夾襖步出監(jiān)牢的瞬間震叙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工散休, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媒楼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓戚丸,卻偏偏與公主長(zhǎng)得像划址,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子限府,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,147評(píng)論 25 707
  • 《騰訊桌球:客戶端總結(jié)》 本次分享總結(jié)夺颤,起源于騰訊桌球項(xiàng)目,但是不僅僅限于項(xiàng)目本身胁勺。雖然基于Unity3D世澜,很多東...
    吳秦閱讀 24,463評(píng)論 12 142
  • This article is a record of my journey to learn Game Deve...
    蔡子聰閱讀 3,783評(píng)論 0 9
  • 很多雞湯都在說選擇很重要寥裂。可是怎么去選擇呢案疲? 好比在做一道英語的選擇題封恰,小明選不出來,于是去請(qǐng)教別人褐啡。 第一個(gè)學(xué)霸...
    熊貓_45a7閱讀 255評(píng)論 0 4
  • 猛暑到诺舔,蟬兒鬧。 葉兒深深不見影备畦。 烈日下低飒,一雙人。 情真切切相扶襯萍恕。
    喜樂心記閱讀 205評(píng)論 0 1