unity底层运行机制_Unity跨平台的机制原理
首先需要了解的是,Unity3D的C#基礎(chǔ)腳本模塊是通過Mono來實現(xiàn)的。
什么是Mono?
參考下百度百科:Mono是一個由Novell公司(由Xamarin發(fā)起)主持的項目,并由Miguel de lcaza領(lǐng)導(dǎo)的,一個致力于開創(chuàng).NET在Linux上使用的開源工程。它包含了一個C#語言的編譯器,一個CLR的Runtime,和一組類庫,并實現(xiàn)了 ADO NET和ASP NET。
它基于CIL和C#的ECMA標(biāo)準(zhǔn),提供了了微軟.Net FrameWork的另一種實現(xiàn)。
Mono主要有以下部分組成:
C#編譯器——mcs。(最新的Mono版本已經(jīng)可以支持C#5.0,但Unity3D的Mono版本仍然停留在2.0+階段(支持c#3.0),所以C#的一些新功能無法在unity中使用)
運行時:即時編譯器JIT(后文會介紹)。以及GC,類庫加載器等等。
基礎(chǔ)類庫(BCL)。
Mono類庫。提供了超出微軟.NET的一些類,提供了許多額外功能,主要是用于構(gòu)建其他操作系統(tǒng)上的應(yīng)用。
下面進(jìn)入正題:
Mono和Unity
Unity引擎本身是由C++寫出的,只不過Mono被嵌入到了Unity當(dāng)中,為unity提供了一個完整的虛擬機運行環(huán)境。這樣Mono的嵌入接口會將Mono Runtime暴露給Unity底層的C++代碼。通過這些接口,開發(fā)者就可以控制Mono Runtime,以及依托于Mono Runtime的托管代碼。
Unity為何能夠跨平臺?
一句話概括,主要原因在于Unity通過Mono使用了一種叫CIL(Common Intermediate Language,也叫MSIL)通用中間語言的基于堆棧的代碼指令集,它屬于CLR的一個子集。
Unity3D的開發(fā)過程中,代碼的編譯主要分為兩個過程:
1)首先將對應(yīng)的腳本代碼編譯成CIL(之后CIL還會被編譯成一種位元碼,生成一個CLI集合)。
2)然后Mono在運行時將CLI集合中的位元碼編譯為本地運行的原生指令。(這里會使用到上文中的JIT、AOT編譯模式)
注:也就是說在Mono中運行的其實是CIL,而在本地運行的是被編譯后生成的原生指令。
更多unity2018的功能介紹請到paws3d學(xué)習(xí)中心查找。
總結(jié)
以上是生活随笔為你收集整理的unity底层运行机制_Unity跨平台的机制原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad多线段长度计算总和_没想到啊,我平
- 下一篇: uiwebview 编辑html5,【i