一項不可忽略的UNITY技術(shù)

xLua在2017年初第一次把“熱補丁”這個概念引入到Unity,一直都爭議不斷挣磨,有人認(rèn)為“功德無量”豪直,也有人認(rèn)為“沒啥價值”劣摇,這兩個極端至今存在。甚至作者本人弓乙,也只是覺得會對游戲有幫助末融,但具體能有多大幫助也沒底。而最近的一個用戶調(diào)查卻發(fā)現(xiàn)唆貌,可能連作者本人都低估了這項技術(shù)的價值滑潘。

(注:這里說的“熱補丁”特指的是運行時用lua函數(shù)替換c#函數(shù)的功能)

熱補丁用戶調(diào)查

我們調(diào)查了8個游戲:

其中3個上過全球收入季度榜前十,1個是多端(手機+PC)同發(fā)锨咙,裝機量3億+,4個是中小型公司的作品追逮。

游戲品類覆蓋了橫版過關(guān)酪刀、競速粹舵、FPS、棋牌骂倘、mmorpg眼滤、卡牌rpg

其中5個純用熱補丁,3個既用了熱補丁历涝,也用了傳統(tǒng)的lua更新

調(diào)查結(jié)果總結(jié):

1诅需、注入代碼不會帶來可以察覺的性能下降,包括對性能敏感的競速和FPS游戲荧库。

2堰塌、只要配置了注入的類型,且在加載補丁后運行的代碼分衫,都能修復(fù)场刑。

3、純用熱補厄秸健:一個月修復(fù)10~30個C# bug不等牵现。混合使用:其中一個幾乎純用lua實現(xiàn)的游戲一個版本偶爾修復(fù)一個C# bug邀桑,其它兩個的2~3個瞎疼。

4、改進意見:代碼段大小壁畸,泛型使用丑慎,大函數(shù)修復(fù)的工作量。

超乎預(yù)料的修復(fù)能力

只要注入了瓤摧,運行時機在補丁加載之后的代碼竿裂,都能修復(fù)!

由于補丁里頭能訪問照弥、調(diào)用到任意的C#代碼腻异,所以理論上不考慮性能的話,配置了注入的代碼都能被修復(fù)这揣。

問題是邏輯轉(zhuǎn)到腳本上執(zhí)行悔常,腳本肯定比原生要慢,如果腳本執(zhí)行過程中要調(diào)用到C#就更慢了给赞。那會不會有某段性能要求很高的代碼机打,轉(zhuǎn)到腳本執(zhí)行后性能完全不能接受呢?

這種情況理論上完全可能的片迅,但被調(diào)查的幾個項目為啥沒出現(xiàn)這種情況呢残邀?

因為性能要求高代表了:1、這段代碼會被頻繁調(diào)用(換句話說會被頻繁測試到);2芥挣、開發(fā)人員也會特別用心去寫驱闷,自測試一般也到位些;3空免、測試人員也會額外留意點空另;4、通常這類代碼在一個項目占比也不多蹋砚。

因此反而這些地方出現(xiàn)bug的概率比較低扼菠。可能被調(diào)查的項目運作都比較規(guī)范坝咐,至少保證重點保障的地方測試到了循榆,因而沒出現(xiàn)因為性能而不能修復(fù)的情況。

代碼段攻略

由調(diào)查可知畅厢,熱補丁技術(shù)使用的最大代價就是代碼段了冯痢。

一方面,xLua持續(xù)的在優(yōu)化代碼段框杜,也提供了各種各樣的注入選項浦楣,能設(shè)定不同的注入模式以及過濾掉一些函數(shù)。合理的選擇選項是可以把影響控制到“被注入代碼”的10%以內(nèi)的咪辱。

而“被注入代碼”振劳,隨著版本的迭代,可以把一些經(jīng)過幾個版本沉淀已經(jīng)穩(wěn)定下來的代碼排除掉油狂。當(dāng)然历恐,初次上線是可以選擇全注入的。

泛型增強

項目反饋說在補丁里頭使用泛型比較麻煩专筷。于是乎xLua為此做了一大波更新弱贼,現(xiàn)在泛型使用更直觀,方便磷蛹,強大了吮旅。詳情可以參見相關(guān)文檔。

下一代熱補丁方案:iFix

改進意見里有點是關(guān)于大函數(shù)修復(fù)的工作量的味咳,對于一些影響不大的bug庇勃,有些項目會因為這個而選擇不修復(fù)。

iFix項目正是為了解決這問題而立項的槽驶,它更易用:直接原工程上改好bug责嚷,配置哪些函數(shù)要做成補丁即可。

熱補丁掂铐,你值得擁有

對于已經(jīng)用C#寫好的項目罕拂,使用熱補丁性價比非常高揍异,低成本:原代碼邏輯不需要做任何調(diào)整,只需要幾行初始化代碼聂受,一些配置蒿秦。高收益:能解決一些線上緊急bug烤镐。

低成本同時意味著可進可退:隨時可以選擇去掉蛋济,真正后顧無憂。

對于希望混合編程的項目炮叶,使用xLua意味著C#的bug也不是完全無能為力了碗旅。

全部用lua來寫的游戲倒沒熱補丁的需求。但全lua感覺只適合卡牌镜悉,休閑類這些對性能要求不高的游戲祟辟。性能要求高的游戲用純C#、混合的居多侣肄,甚至有些項目對于一些要求高的地方旧困,C#都無法滿足需求,得用C++稼锅。

純lua還有其它困境:比如最近純lua游戲容易出現(xiàn)機審不過的情況吼具;大量的lua在后期維護也是個問題等等。

常見誤解

一些常見的誤解矩距,這些誤解是很多人接納熱補丁技術(shù)的坎拗盒。

1、“打補丁”要把C#翻譯成lua锥债,后面更新大版本又要把lua翻譯成C#陡蝇。

對于這種觀點,我想說三點:“哮肚。登夫。≡侍耍”恼策,拋開熱補丁不說,用C#開發(fā)的項目拼窥,出bug也要在C#上修復(fù)吧戏蔑?有了xLua熱補丁,只是增加了能通過lua對線上緊急問題修復(fù)的能力鲁纠,線上緊急問題輕則影響了口碑总棵,重則可能導(dǎo)致一個游戲的沒落(參見某陽師),這重要性不言而喻改含。

2情龄、我不知道哪出bug,怎么知道哪些類要打Hotfix標(biāo)簽?zāi)兀?/p>

前面的調(diào)查我們知道,使用熱補丁的唯一代價就是代碼段增加骤视,這個增加是正比于你配置了Hotfix的類的個數(shù)的鞍爱。所以xLua提供的是白名單機制,讓你去配置专酗。

當(dāng)你實在沒底的話睹逃,可以選擇把所有類都配置到Hotfix,比如剛上線的項目往往選擇這種祷肯。

有人會問抵屿,全加上之拨,一個個類的打標(biāo)簽不是瘋了键耕?

一個個類的打標(biāo)簽枫振?不存在的,xLua的動態(tài)配置可以讓你幾行代碼實現(xiàn)全部業(yè)務(wù)代碼加到Hotfix列表:

[Hotfix]public static List<Type> by_property{

? ?get

? ?{

? ? ? ?return (from type in Assembly.Load("Assembly-CSharp").GetTypes() select type).ToList();

? ?}}

有人會問蒋纬,為啥不默認(rèn)全加上呢猎荠?既然全加上只是幾行代碼的事情,為啥要整成默認(rèn)蜀备,剝奪大家的選擇權(quán)呢关摇?

動態(tài)配置可以加些條件,比如只允許某名字空間琼掠,某個代碼目錄拒垃,排除某些自定類型等等。

總結(jié)

在邏輯更新領(lǐng)域中瓷蛙,bug修復(fù)時效性要求最高悼瓮,而熱補丁技術(shù)恰恰能低成本提供的bug修復(fù)能力,如果你能接受這成本(主要是代碼段增大)艰猬,實在不應(yīng)該有拒絕這項技術(shù)的理由横堡。

更多資料可加群下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冠桃,隨后出現(xiàn)的幾起案子命贴,更是在濱河造成了極大的恐慌,老刑警劉巖食听,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胸蛛,死亡現(xiàn)場離奇詭異,居然都是意外死亡樱报,警方通過查閱死者的電腦和手機葬项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹蛤,“玉大人民珍,你說我怎么就攤上這事襟士。” “怎么了嚷量?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵陋桂,是天一觀的道長。 經(jīng)常有香客問我蝶溶,道長嗜历,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任身坐,我火速辦了婚禮秸脱,結(jié)果婚禮上落包,老公的妹妹穿的比我還像新娘部蛇。我一直安慰自己,他們只是感情好咐蝇,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布涯鲁。 她就那樣靜靜地躺著,像睡著了一般有序。 火紅的嫁衣襯著肌膚如雪抹腿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天旭寿,我揣著相機與錄音警绩,去河邊找鬼。 笑死盅称,一個胖子當(dāng)著我的面吹牛肩祥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缩膝,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼混狠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疾层?” 一聲冷哼從身側(cè)響起将饺,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痛黎,沒想到半個月后予弧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡湖饱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年掖蛤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琉历。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坠七,死狀恐怖水醋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彪置,我是刑警寧澤拄踪,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站拳魁,受9級特大地震影響惶桐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潘懊,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一姚糊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧授舟,春花似錦救恨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奢啥,卻和暖如春秸仙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桩盲。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工寂纪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赌结。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓捞蛋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姑曙。 傳聞我的和親對象是個殘疾皇子襟交,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348