Unity3D脚本编程读书笔记——第2章 Mono脚本核心基础
應用的引擎由富有經驗的開發人員使用C/C++開發,而一些具體項目中功能的實現則使用高級語言開發。
文章目錄
- 前言
- 1. Mono是什么
- 2. Mono和腳本
- 3. 跨平臺和CIL
- 4. C#和UnityScript
- 總結
前言
本篇是針對《Unity3D腳本編程——使用C#語言開發跨平臺游戲》一書 第2章節《Mono所搭建的腳本核心基礎》 的讀書筆記,記錄了其中一些基礎知識、核心要點以及一些有趣的信息。
本章節的核心內容在于剖析Unity3D的腳本基礎所依賴的.NET環境,即Mono運行時,介紹其是為什么,以及在Unity3D腳本編程中扮演什么樣的角色。本章節并沒有涉及到編寫腳本程序的內容,更多的,是介紹腳本引擎的特性。
1. Mono是什么
Mono是Xararin公司所贊助的開源項目,是微軟.NET框架的另一種實現(是.NET框架在不同平臺上的補充),同時它具備了跨平臺的能力。
- Mono 1.0(2004) Linux桌面應用程序開發者平臺
Mono的組件:
- C#編譯器 mcs
- Mono運行時 提供一個即時編譯器(Just-in-time,JIT),一個提前編譯器(Ahead-of-time,AOT),還有類庫加載器、垃圾回收器(運行時會追蹤目標對象,并且自行決定是否回收對象的內存)和線程系統等
- 基礎類庫 同時兼容微軟的.NET框架
- Mono類庫
其中,C#編譯器mcs將C#編譯為CIL的字節碼(byte code),然后Mono運行時中的編譯器將CIL的字節碼轉譯為原生碼(native code),共有3種轉譯方式:
- 即時編譯(JIT) 在程序運行過程中將CIL的字節碼轉譯為目標平臺的原生碼
- 提前編譯(AOT) 在程序運行之前將執行程序或動態鏈接庫的CIL字節碼轉譯為目標平臺的原生碼并存儲起來(仍會有需要用JIT轉譯的部分)
- 完全靜態編譯(Full-ahead-of-time,Full-AOT) 在程序運行之前所有的代碼就已經編譯成目標平臺的原生碼(如針對iOS平臺)
2. Mono和腳本
語言從低級到高級的大概排名:
- 匯編
- C/C++ 編譯型靜態不安全語言
- C#,Java 編譯型靜態安全語言
- Python、Perl、JavaScript 解釋型動態安全語言
Mono運行時嵌入到應用后,得到一個完整的虛擬機運行環境。
托管代碼 通過CIL編譯器生成的CIL代碼
總結來說,Mono運行時去支撐腳本架構的基礎主要體現在兩點上:在C#中調用C++中的方法,以及在C++中調用C#中實現的方法。如此,腳本層面可以調用引擎底層提供的方法,而引擎可以通過句柄的方式解讀腳本代碼。
3. 跨平臺和CIL
跨平臺的核心原理——中間層過渡轉換,對應到Unity3D,就是CIL代碼指令集。
CIL的特性 可以運行在所有支持CLI(Common Language Infrastructure,通用語言基礎結構)的環境中,從而實現了平臺無關(或CPU無關)
源代碼——中間語言——虛擬機——原生代碼
4. C#和UnityScript
腳本語言的選擇,本質上是對腳本編譯器(可以把相應腳本編譯為CIL)的選擇。
C#和UnityScript是存在效率差異的,其根源主要在于二者經過編譯器生成的CIL中間語言并不是完全一致的,主要是一些語言細節上的處理的差異,進而會導致一些影響效率的操作(如裝箱拆箱等)。
總結
本章著力于闡述Mono運行時以及其在串聯低級語言和高級語言時的作用,涉及到的內容艱深晦澀,但好在其中的過程相對比較清晰,需要始終抓住一個核心原理:CIL的多平臺支持性。CIL就好像一個轉接頭,我們需要想辦法把代碼流進去,而它自然會為你轉接到各種各樣的設備。
總結
以上是生活随笔為你收集整理的Unity3D脚本编程读书笔记——第2章 Mono脚本核心基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2000)vue之电商管理系统
- 下一篇: 主题:一个成功的RIA技术需要满足的条件