【InjectFix】injectFix熱修復使用介紹
阿新 • • 發佈:2021-01-12
熱修復示例原始碼GitHub - Tencent/InjectFix: InjectFix is a hot-fix solution library for Unity
XLua的升級版,可以直接在unity工程上修改C#程式碼即可更新,符合蘋果熱更新條款
一、原理:
虛擬機器負責新邏輯的解析執行;注入程式碼負責把呼叫重定向到虛擬機器;
二、使用流程和方法:
1.安裝
熱修復(更新)方案使用教程(Tentcent InjectFix) - 程式設計師大本營 (pianshen.com)
下載解壓後,VSProj資料夾下的built_for_unity.bat檔案,編輯修改UNITY_HOME為本機unity安裝目錄,儲存之後執行
IFixToolKit資料夾在和Asset資料夾同級目錄,Assets資料夾下有IFix和Plugins資料夾
開啟之後可以看到:
1.Inject:注入,對工程進行一系列操作,儲存當前狀態,Inject之後就不能生成補丁了
2.Fix:生成一個熱修復檔案,檔案就是用來熱修復的,以.bytes結尾
2.配置熱更新
熱更新的實現依賴於提前做些靜態程式碼插入,需要做配置類
而且配置必須打[Configure]標籤 必須放在Editor目錄下,創個指令碼在Editor下
//兩種方式 //1、配置類必須打[Configure]標籤 //2、必須放Editor目錄 [Configure] public class HelloworldCfg { [IFix] private static IEnumerable<Type> hotfix {注: *配置類打上Configure標籤 * 配置的屬性打上IFix標籤,而且必須是 __static__ 型別 3.修改bug打補丁 如; 錯誤的程式碼:get { return new List<Type>() { typeof(Helloworld), typeof(IFix.Test.Calculator), //AnotherClass在Pro Standard Assets下,會編譯到Assembly-CSharp-firstpass.dll下,用來演示多dll的修復 typeof(AnotherClass), }; } } [IFix]private static IEnumerable<Type> ToProcess { get { return (from type in Assembly.Load("Assembly-CSharp").GetTypes() where type.Namespace == "XLua" && !type.Name.Contains("<") select type); //對XLua名稱空間下進行插入 } } }
public int Add(int a, int b) { return a - b; }
在方法上打上[Patch]標籤並修改裡面內容
[Patch] public int Add(int a, int b) { return a + b; }
儲存之後執行InjectFix/Fix選單,在專案資料夾中生成.bytes檔案
4.上傳補丁 實際專案可上傳到伺服器中載入,在此仍然在原專案中使用,將Assembly-CSharp.patch.bytes檔案放在Resources資料夾中。