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