1. 程式人生 > >【Unity3D】Unity3D工具、Mono工具、內部指令碼工作原理以及跨平臺特性

【Unity3D】Unity3D工具、Mono工具、內部指令碼工作原理以及跨平臺特性

Unity3D工具、Mono工具、內部指令碼工作原理以及跨平臺特性

1、幾個概念的理解:

Unity3D主要包括兩個部分:Unity Engine和Unity Editor。提供了UnityEngine.dll和UnityEditor.dll兩個動態庫。
Unity Engine:C/C++編寫,由平臺相關程式碼,圖形API、物理引擎、燈光、網路層介面等組成,編譯為UnityEngine.dll,各平臺不同,使用者Shader程式碼也屬於這一層的內容;
Unity Editor:IDE工具,大部分是由C#編寫,外掛也是用C#編寫(呼叫UnityEditor.dll開發),使用者指令碼可用C#/JS/Boo編寫,專案程式碼最後由Mono編譯;
Mono執行環境:Novell公司開發的跨平臺·NET執行環境。功能是編譯工程以及提供不同平臺的CLR執行時。對於Android平臺,首先編譯輸出為dll(即IL),遊戲啟動時Mono執行時再將使用者dll和UnityEngine.dll等編譯為JIT格式執行;對於IOS平臺,由於不允許執行時生成Native Code,只能一次性將UnityEngine.dll和使用者指令碼等編譯為Full AOT格式儲存。

JIT(Just-in-Time compilation,即時編譯)

AOT(Ahead-of-Time,提前編譯或靜態編譯)

上面說了,在IOS平臺,不能再執行時生成Native code,為了繞過蘋果公司的這個機制,可以使用Lua語言來實現熱更新。


2、Unity3D程式以及內部指令碼工作原理:
由上面介紹可知,Unity程式呼叫的層次關係是:

指令碼(C#/JS/Boo)/UnityEditor/Unity Plugin --> 

UnityEngine(C/C++) --> 

圖形API(OpenGL/DirectX/CG/Shader等)/物理引擎(Nvidia的PhysX)/燈光(Autodesk的Beast/Enlighten)/網路層(UNET) --> 

底層程式碼(如作業系統核心、彙編等) --> 

硬體

3、Unity3D跨平臺特性:
這裡的上帝是Mono,它為Unity遊戲提供了.Net框架。針對不同平臺的編譯打包,都會把Mono執行時打包進去,當執行使用者指令碼的時候,就是由它來解析,從而達到跨平臺的效果。