ILRuntime的介紹與環境架構
關於 ILRuntime
ILRuntime專案為基於C#的平臺(例如Unity)提供了一個純C#實現,快速、方便且可靠的IL執行時,使得能夠在不支援JIT的硬體環境(如iOS)能夠實現程式碼的熱更新
ILRuntime 與其他熱更新方面的優勢
同市面上的其他熱更方案相比,ILRuntime主要有以下優點:
- 無縫訪問C#工程的現成程式碼,無需額外抽象指令碼API
- 直接使用VS2015進行開發,ILRuntime的解譯引擎支援.Net 4.6編譯的DLL
- 執行效率是L#的10-20倍
- 選擇性的CLR繫結使跨域呼叫更快速,繫結後跨域呼叫的效能能達到slua的2倍左右(從指令碼呼叫GameObject之類的介面)
- 支援跨域繼承
- 完整的泛型支援
- 擁有Visual Studio的除錯外掛,可以實現真機原始碼級除錯。支援Visual Studio 2015 Update3 以及Visual Studio 2017和Visual Studio 2019
- 最新的2.0版引入的暫存器模式將數學運算效能進行了大幅優化
C#與Lua熱更對比
目前市面上主流的熱更方案,主要分為Lua的實現和用C#的實現,兩種實現方式各有各的優缺點。
- Lua是一個已經非常成熟的解決方案,但是對於Unity專案而言,也有非常明顯的缺點。就是如果使用Lua來進行邏輯開發,就勢必要求團隊當中的人員需要同時對Lua和C#都特別熟悉,或者將團隊中的人員分成C#小組和Lua小組。不管哪一種方案,對於中小型團隊都是非常痛苦的一件事情。
- 用C#來作為熱更語言最大的優勢就是專案可以用同一個語言來進行開發,對Unity專案而言,這種方式肯定是開發效率最高的。
- Lua的優勢在於解決方案足夠成熟,之前的C++團隊可能比起C#,更加習慣使用Lua來進行邏輯開發。此外借助luajit,在某些情況下的執行效率會非常不錯,但是luajit現在維護情況也不容樂觀,官方還是推薦使用公版Lua來開發。
ILRuntime 的搭建
在Unity2018以上版本中開始使用ILRuntime,所以我們可以很方便的在Unity中部署它的執行環境
1.新建任意一個空專案匯入ILRuntime,版本在Unity2018以上即可,步驟如下
2.開啟 Edit -> Project Settings -> Player -> 找到 Other Settings 下的 Allow 'unsafe' Code ,步驟如下
3.根據官方目前的更新,下載合適的.Net 支援庫版本,我寫這篇文件時官方說明的支援版本為.Net 4.6
4.(建議下載)下載官方示範案例方法:
- 在Project目錄下,找到ILRuntime資料夾中的README文件,下載官方示範案例
- 在匯入的PackManager中直接匯入官方示範案例
5.在Project列表中新建一個StreamingAssets資料夾,因為我們最終開發出來的熱更新邏輯程式碼會在StreamingAssets中存放、呼叫
6.此時我們的目錄結構為
7.(擴充套件修改)匯入的Demo資料夾,開啟後有一個配置檔案可以進行修改
(擴充套件 ---> 如何快速查詢自己運用的.Net 程式碼庫版本)
在保證Preject內有任意一個C#指令碼後,開啟專案資料夾至Assets同級的資料夾內,會有一個Assembly-CSharp.csproj的檔案,開啟即可知道自己所使用的.Net程式碼庫版本
8.在同目錄下,開啟HotFix_Project.sln檔案,更改編譯設定,重新生成解決方案
生成成功後我們的StreamingAssets目錄就會自動生成熱更邏輯程式碼了,目錄如圖
9.此時ILRuntime的基本執行環境就有了,可以進行示範案例的使用、測試與學習了!
沒有人應該止步不前,除非你覺得這樣就很好了