首先需要了解的是,unity3d的c#基礎指令碼模組是通過mono來實現的。
什麼是mono?
它基於cil和c#的ecma標準,提供了了微軟.net framework的另一種實現。
mono主要有以下部分組成:
c#編譯器——mcs。(最新的mono版本已經可以支援c#5.0,但unity3d的mono版本仍然停留在2.0+階段(支援c#3.0),所以c#的一些新功能無法在unity中使用)
執行時:即時編譯器jit(後文會介紹)。以及gc,類庫載入器等等。
基礎類庫(bcl)。
mono類庫。提供了超出微軟.net的一些類,提供了許多額外功能,主要是用於構建其他作業系統上的應用。
下面進入正題:
mono和unity
unity引擎本身是由c++寫出的,只不過mono被嵌入到了unity當中,為unity提供了乙個完整的虛擬機器執行環境。這樣mono的嵌入介面會將mono runtime暴露給unity底層的c++**。通過這些介面,開發者就可以控制mono runtime,以及依託於mono runtime的託管**。
unity為何能夠跨平台?
一句話概括,主要原因在於unity通過mono使用了一種叫cil(common intermediate language,也叫msil)通用中間語言的基於堆疊的**指令集,它屬於clr的乙個子集。
unity3d的開發過程中,**的編譯主要分為兩個過程:
1)首先將對應的指令碼**編譯成cil(之後cil還會被編譯成一種位元碼,生成乙個cli集合)。
2)然後mono在執行時將cli集合中的位元碼編譯為本地執行的原生指令。(這裡會使用到上文中的jit、aot編譯模式)
注:也就是說在mono中執行的其實是cil,而在本地執行的是被編譯後生成的原生指令。
更多unity2018的功能介紹請到paws3d學習中心查詢。鏈結也可以加入unity學習討論群935714213
近期更有資深開發人士直播分享unity開發經驗,詳情請進入官網或加入qq群了解
學習筆記之Unity跨平台原理
mono虛擬機器包含乙個實時編譯引擎,該引擎可用於如下處理器 x86,sparc,powerpc,arm,s390 32位模式和64位模式 x86 x64,ia64和64位模式的sparc.該虛擬機器可以將 實時編譯或者預先編譯到原生 對於那些沒有列出來的系統,則使用的是 直譯器.unity的跨平台...
Unity3d跨平台原理
知乎的乙個提問 unity3d跨平台原理 一些資料 il是.net框架中中間語言 intermediate language 的縮寫。使用.net框架提供的編譯器可以直接將源程式編譯為.exe或.dll檔案,但此時編譯出來的程式 並不是cpu能直接執行的機器 而是一種中間語言il intermedi...
Unity3d跨平台原理
知乎的乙個提問 unity3d跨平台原理 一些資料 il是.net框架中中間語言 intermediate language 的縮寫。使用.net框架提供的編譯器可以直接將源程式編譯為.exe或.dll檔案,但此時編譯出來的程式 並不是cpu能直接執行的機器 而是一種中間語言il intermedi...