日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bat比较有意思的代码_腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bat比较有意思的代码_腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

InjectFix

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

Unity代碼邏輯熱修復

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

幾個亮點

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

編譯安裝

  • Window下打開源碼包的SourceVSProjbuild_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 ToProcess { get { return (from type in Assembly.Load("Assembly-CSharp").GetTypes() where type.Namespace == "XLua" && !type.Name.Contains("

劃下重點:

配置類打上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甥楮祴201702EditorDataMonoBleedingEdgebinmono.exe" "D:Program Files甥楮祴201702EditorDataMonoBleedingEdgelibmono4.5mcs.exe" @Temp/UnityTempFile-55a959adddae39f4aaa18507dd165989

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

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

github地址:

https://github.com/tencent/injectfix

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

總結

以上是生活随笔為你收集整理的bat比较有意思的代码_腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。