1. 程式人生 > 實用技巧 >【InjectFix】injectFix熱修復使用介紹

【InjectFix】injectFix熱修復使用介紹

熱修復示例原始碼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
    {
        
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名稱空間下進行插入 } } }

注: *配置類打上Configure標籤 * 配置的屬性打上IFix標籤,而且必須是 __static__ 型別 3.修改bug打補丁 如; 錯誤的程式碼:
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資料夾中。