1. 程式人生 > >Unity 和Mono的關係

Unity 和Mono的關係

之前誤解以為MonoBehaviour是Mono的東西,其實Mono打包之後才會體現出它的價值.
Mono是如何誕生的?
C#是如何被執行的?C#程式碼編寫好之後被C#編譯器編譯成IL程式碼,然後IL程式碼被CLR執行時(JIT,AOT兩種編譯模式)編譯成本機程式碼.但.net framework因為特定的依賴是能在windows上執行,於是Mono為了跨平臺就誕生了.
.net .net framework CIL CLR CLI:.net是一個對一系列功能的期待,於是.net framework 是.net的實現. CIL,CLR,CLI都是屬於.net framework
Unity是如何跨平臺的?
mono就作為一箇中間層將IL程式碼的處理分出好多個分支,分別對應不同的平臺.Mono其實和.net framework 是同一個東西,只不過Mono支援更多的平臺,但.net的執行效率更高
Unity打包時會將mono一同打包進來,同時Unity將指令碼編譯為IL程式碼打包,這樣只要是Mono支援的平臺,都可以在Mono中編譯成平臺原生代碼
這是一個apk解壓後的資料夾

所有在Unity中所用到的類庫都在這裡,比如你引用一個System就會把相關的類庫加進來,Assembly-CSharp.dll這個檔案放的是所有你編寫的指令碼,Mono或者叫Mono執行時就是上圖的libmono.so會把下圖所有類庫都編譯成本機程式碼,至於還有一個libunity.so估計是跟執行unity有關的把.

lib

中間程式碼可以實現平臺無關性,即與特定CPU無關,只要把.NET框架某種語言編譯成IL程式碼,就實現.NET框架中語言之間的互動操作(這就是為什麼unity3D裡面可以c#和js混編)