日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D脚本编程读书笔记——第2章 Mono脚本核心基础

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D脚本编程读书笔记——第2章 Mono脚本核心基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

應(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。