騰訊開源的 Unity全系列 代碼邏輯熱修復方案--InjectFix

2019年09月14日08:52:10 科技 1510

騰訊開源的 Unity全系列 代碼邏輯熱修復方案--InjectFix - 天天要聞

InjectFix

騰訊開源的 Unity 代碼邏輯熱修復方案

Unity代碼邏輯熱修復

可用於Unity業務的bug修復,支持Unity全系列,全平台。

幾個亮點

  • 直接在Unity工程上修改C#即可更新
  • 老項目無需修改原有代碼即可使用
  • 每個遊戲一份私有補丁格式,安全更有保障

編譯安裝

  • Window下打開源碼包的Source\VSProj\build_for_unity.bat,UNITY_HOME變量的值修改為指向本機unity安裝目錄
  • 運行build_for_unity.bat

複製

這裡對應的是一個Unity工程目錄

  • IFixToolKit拷貝到Unity項目的Assets同級目錄
  • Assets/IFix,Assets/Plugins拷貝到Unity項目的Assets下

接入示例

判斷有補丁就加載補丁

var patchPath = "./Assets/IFix/Resources/Assembly-CSharp.ill.bytes";
if (File.Exists(patchPath))
{
PatchManager.Load(new FileStream(patchPath, FileMode.Open));
}

配置

熱補丁的實現依賴於提前做些靜態代碼插入,所以需要配置對哪些類預處理,配置了才能被修復。一般而言,只要不是性能要求很苛刻的類都可以加入。

iFix支持動態和靜態列表方式,由於類型往往比較多,動態列表會方便些。下面是一個實例,配置XLua名字空間下除匿名類之外的所有類型。

[Configure]
public class InterpertConfig {
[IFix]
static IEnumerable<Type> ToProcess
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XLua" && !type.Name.Contains("<")
select type);
}
}
}

划下重點:

  • 配置類打上Configure標籤
  • 配置的屬性打上IFix標籤,而且必須是 static 類型

動態配置除了不用一個個配,還可能有其它額外好處,比如上述配置,後續該名字空間下增刪類,都不需要更改配置。

配置好後,打包手機版本會自動預處理,如果希望自動化打包,也可以手動調用IFix.Editor.IFixEditor.InjectAllAssemblys函數。

補丁製作

對需要打補丁的函數打上Patch標籤

[Patch]
public int Add(int a, int b)
{
return a + b;
}

執行"InjectFix/Fix"菜單。

補丁製作成功後會放到工程目錄下,文件名為「{Dll Name}.patch.bytes」(比如:「Assembly-CSharp.patch.bytes」),上傳補丁到手機,加載就能看到效果。

注意事項:如果要Patch的函數存在條件編譯宏,比如這樣的代碼:

[Patch]
public void Job(int a)
{
#if UNITY_EDITOR
Foo();
#endif
#if !UNITY_EDITOR
Bar();
#endif
}

如果還是直接在編輯器下直接生成補丁,將會比手機上運行多調用了個Foo,少調用了個Bar,這可能會導致各種問題:邏輯不對,調用了編輯器專用函數而導致找不到要調用的函數等等。

這時可以按對應平台的編譯參數把Assembly-CSharp.dll編譯出來,然後調用IFix.Editor.IFixEditor.GenPatch去生成補丁。

Unity編譯是在工程的Temp目錄新建一個文件,把命令行參數放到那個文件,然後執行類似(目錄根據自己的unity安裝情況而定)如下命令進行編譯:

"D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\bin\mono.exe" "D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\lib\mono\4.5\mcs.exe" @Temp/UnityTempFile-55a959adddae39f4aaa18507dd165989

你可以嘗試一次編輯器下的手機版本打包,然後到工程目錄下的Temp目錄把那個臨時文件拷貝出來(編譯完會自動刪掉,所以要手快)。

這個文件大多數地方都不會變的,變的主要是C#文件列表,可以改為動態生成這個文件:C#文件列表根據當前項目生成,其它保持不變。然後用這個文件作為輸入來編譯。

github地址:

https://github.com/tencent/injectfix

更多更優質的資訊,請關注我,你的支持會鼓勵我不斷分享更多更好的優質文章。

科技分類資訊推薦

618必買清單:ROG高性能遊戲鼠標,讓每一次點擊都精準無誤! - 天天要聞

618必買清單:ROG高性能遊戲鼠標,讓每一次點擊都精準無誤!

隨着618購物狂歡節的熱烈進行,電競外設市場也迎來了一場前所未有的盛宴。作為電競裝備領域的翹楚,ROG(玩家國度)不僅以其創新的設計和卓越的性能贏得了廣大玩家的喜愛,而且在此次促銷活動中推出了多款爆款遊戲鼠標,以超值的價格吸引了無數遊戲玩家
AI時代網絡安全該如何突圍?齊向東:要重塑內生安全體系! - 天天要聞

AI時代網絡安全該如何突圍?齊向東:要重塑內生安全體系!

【ZOL中關村在線原創專訪】當下,數智化浪潮席捲千行百業,在安全領域,以大模型、AI Agent 為代表的人工智能形態帶來全新挑戰。大模型自身安全,以及由此衍生的數據安全、網絡安全問題,已引發行業普遍關注。在近日舉行的2025全球數字經濟大會數字安全主論壇暨北京網絡安全大會上,全國政協委員、全國工商聯副主席、奇安信...
谷歌瀏覽器刷新速度紀錄 - 天天要聞

谷歌瀏覽器刷新速度紀錄

#夏日生活打開季#快速導讀谷歌宣布其Chrome瀏覽器在Speedometer 3基準測試中創下歷史新高,顯示出顯著的性能提升。這一改進使用戶每年節省約5800萬小時的網頁加載時間,相當於83個生命的時間。
iOS 18.5 郵件出故障了 - 天天要聞

iOS 18.5 郵件出故障了

#萬能生活指南#快速導讀最近,許多iPhone用戶報告郵件應用在打開時出現空白屏幕或無響應的情況,這可能與iOS 18.5相關的軟件故障有關。儘管這一問題影響了多個iPhone型號,蘋果尚未公開承認。
谷歌測試AI模式的實時搜索 - 天天要聞

谷歌測試AI模式的實時搜索

#夏日生活打開季#快速導讀谷歌在2025年I/O大會上預覽的「搜索實時」功能現已進入測試階段,旨在提供與用戶的實時對話體驗。該功能由項目Astra支持,與Gemini Live類似。選中參與推廣的用戶將在谷歌應用的搜索欄下方看到一個新的波形
比亞迪官宣限時一口價,海鷗智駕版5.58萬起 - 天天要聞

比亞迪官宣限時一口價,海鷗智駕版5.58萬起

為回饋廣大用戶的支持與厚愛,比亞迪海洋網推出「禮遇一夏,限時一口價」活動,即日起至6月30日,購買海鷗智駕版、海豚智駕版、宋PLUS智駕版、海豹06DM-i智駕版等10款智駕版車型,即可享受限時一口價的驚爆活動,其中海鷗智駕版限時一口價5.58萬,海豚智駕版限
巨輪破浪智聯全球:上汽全球化價值出海的戰略躍遷 - 天天要聞

巨輪破浪智聯全球:上汽全球化價值出海的戰略躍遷

當9500車位的「安吉安盛」輪劃破太平洋的波濤,當MG i-Smart系統百萬激活量的數據點亮全球車聯網,當上海車展的Glocal戰略3.0引發國際同行側目——這三個看似獨立的事件節點,在上汽集團的戰略坐標系中交匯成清晰的軌跡。2025年的春天,這家中國汽車工
深挖特朗普馬斯克互懟的17條帖子後,我們發現…… - 天天要聞

深挖特朗普馬斯克互懟的17條帖子後,我們發現……

馬斯克、特朗普徹底決裂,距離馬斯克離開白宮、特朗普送他金鑰匙才過去5天。當時在白宮,兩個人還一通寒暄,特朗普說「馬斯克太棒了」。馬斯克表示感謝,稱自己將作為特朗普的「朋友和顧問」,「如果總統有任何事希望我去做,我將隨時效勞」。而眼尖的記者發現,雖然馬斯克頭戴寫有「DOGE」(美國政府效率部的簡稱)字樣的...
12.5MWh全球最大容量儲能系統發佈 合肥一季度儲能系統同比增長425% - 天天要聞

12.5MWh全球最大容量儲能系統發佈 合肥一季度儲能系統同比增長425%

大皖新聞訊 6月5日,就在RCEP成員國代表齊聚合肥,尋求新能源領域國際合作時,陽光電源發佈了12.5MWh全球最大容量儲能系統,首台真機在合肥總部智能工廠正式下線。近年來,合肥先進光伏及新型儲能產業快速發展,2024年全市光儲產業實現營收1996億元。今年一季度,儲能系統達10.71GWh、同比增長425%。行業首個可量產684Ah大...
3K價位之中,誰更懂客廳電視機痛點? - 天天要聞

3K價位之中,誰更懂客廳電視機痛點?

當618遇上國補政策,2025年成為了升級客廳影音體驗的最佳時機。面對琳琅滿目的Mini LED電視,消費者該如何選擇?T6L Pro與E5Q作為3000元檔的熱門選手,各自拿出了看家本領。今天我們就來客觀剖析這兩款「質價比神機」的真實表現