unity的c#腳本和標準的c#語言有什么區(qū)別和聯(lián)系嘿棘?unity是僅僅使用了c#的語法嗎?

這個問題可以從Unity支持的.NET標準和實現(xiàn)細節(jié)兩個角度看汤求。

?從對 .NET?標準支持的角度看畅哑,這只是一個版本的問題肴楷。

Unity的 .NET Runtime 版本是 2.0,支持的? .NET Profile 是3.5敢课,默認的 C# 語言版本是 4.0阶祭。

這和你用 Visual Studio 2017 把語言版本降到 4.0,寫一個 3.5 的庫是一樣的直秆,區(qū)別只是在于版本比較落后濒募,很多 .NET 4.x 的新功能不能用。

其他主流的 .NET 實現(xiàn)有傳統(tǒng)的 .NET Framework 圾结,跨平臺移動開發(fā)用的Xamarin/Mono和跨平臺的 .NET Core瑰剃。

這三種實現(xiàn)相對比較統(tǒng)一,支持4.0的 Runtime筝野,4.6 的庫和 C# 7晌姚。自從去年加入了 .NET Foundation Technical Steering Group,Unity也在努力向最新標準靠攏歇竟,現(xiàn)在微軟的Xamarin團隊正在和Unity一起做這個事情挥唠。

這個過程中最重要的里程碑就是即將到來的 .NET Standard 2.0,其發(fā)布之后包括Unity在內(nèi)的主流 .NET 實現(xiàn)都會支持這一標準焕议,這樣一來在 .NET 標準層面上Unity就真的和其他 .NET 實現(xiàn)沒有區(qū)別了宝磨。

在實現(xiàn)細節(jié)上,Unity和其他 .NET 實現(xiàn)相比還是有短時間內(nèi)難以彌補的差距。主要原因是Unity的技術架構比較復雜唤锉,又有很強的跨平臺需求世囊,所以升級起來比較困難。Unity Scripting的技術架構從下到上主要有三個部分:

1. C++ 編寫的引擎內(nèi)核窿祥,Unity 絕大部分核心功能都在這一層實現(xiàn)株憾。

2. IL2CPP,一個 AOT 的runtime實現(xiàn)晒衩,提供 .NET 執(zhí)行引擎和 GC等服務嗤瞎。Unity 從Mono 遷移到 IL2CPP的主要動力主要是相比于不停修改 Mono,基于 C++的工具鏈更容易將 runtime移植到新的平臺上浸遗。

3. 基于 Mono嵌入技術的用戶腳本猫胁。Unity相當于在一個C++寫的native程序中內(nèi)嵌了一個 Mono環(huán)境,包含引擎核心功能的 native API以UnityEngine.dll這樣的形式封裝起來提供給 Mono腳本調(diào)用跛锌。而腳本實際上被編譯成一個普通的 .NET assembly弃秆,Unity加載以后根據(jù)需要調(diào)用和執(zhí)行。

另外除了用戶自己寫的 C#腳本髓帽,Unity 編輯器的大部分 UI和 UnityEngine.UI.dll也是以用戶腳本的形式在這一層實現(xiàn)的菠赚。

Unity 跟其他 .NET 實現(xiàn)的主要差距是在runtime性能和工具支持方面。首先是build pipeline郑藏,即使Unity支持了 .NET Standard 2.0衡查,可能也沒法短時間內(nèi)把編譯器換成Roslyn,意味著不能第一時間用上 C# 7必盖。主要原因是Roslyn生成的debug符號跟mono差別比較大拌牲,debug 引擎需要做相應的修改。其次缺少對NuGet的支持也讓Unity比較難融入 .NET 生態(tài)系統(tǒng)歌粥,Unity 的Project 系統(tǒng)和包管理系統(tǒng)都很薄弱塌忽,詭異的pipeline想要支持NuGet 需要很大的改動,微軟方面也要配合才行失驶。Unity 內(nèi)部也才開始討論這個問題土居,并沒有明確的方案,能實現(xiàn)估計要相當長時間嬉探。

Runtime 方面也不樂觀擦耀,首當其沖的就是 GC。Unity 想要換一個更好更適合 C#的? GC涩堤,難度主要在于復雜的執(zhí)行環(huán)境眷蜓,Unity 需要在 native環(huán)境下操縱托管環(huán)境下的腳本對象,想支持 GC分代回收和移動對象位置胎围,這部分還是有很多工作需要做吁系。然而如果不把 Boehm GC換掉芹敌,升級 .NET Profile的意義就變得很微妙,.NET和 C#的很多設計都基于對 GC性能的信心垮抗,比如async/await,沒有一個好 GC碧聪,用起來還是會束手束腳冒版。

也許很快我們就會有一個支持最新 .NET 標準的 Unity了,然而其在開發(fā)體驗和性能方面還是會長時間落后于其他 .NET實現(xiàn)逞姿。希望這期間不要被別的引擎干掉就好辞嗡。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市滞造,隨后出現(xiàn)的幾起案子续室,更是在濱河造成了極大的恐慌,老刑警劉巖谒养,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挺狰,死亡現(xiàn)場離奇詭異,居然都是意外死亡买窟,警方通過查閱死者的電腦和手機丰泊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始绍,“玉大人瞳购,你說我怎么就攤上這事】魍疲” “怎么了学赛?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吞杭。 經(jīng)常有香客問我盏浇,道長,這世上最難降的妖魔是什么篇亭? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任缠捌,我火速辦了婚禮,結果婚禮上译蒂,老公的妹妹穿的比我還像新娘曼月。我一直安慰自己,他們只是感情好柔昼,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布哑芹。 她就那樣靜靜地躺著,像睡著了一般捕透。 火紅的嫁衣襯著肌膚如雪聪姿。 梳的紋絲不亂的頭發(fā)上碴萧,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音末购,去河邊找鬼破喻。 笑死,一個胖子當著我的面吹牛盟榴,可吹牛的內(nèi)容都是我干的曹质。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼擎场,長吁一口氣:“原來是場噩夢啊……” “哼羽德!你這毒婦竟也來了?” 一聲冷哼從身側響起迅办,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宅静,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后站欺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姨夹,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年镊绪,在試婚紗的時候發(fā)現(xiàn)自己被綠了匀伏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝴韭,死狀恐怖够颠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榄鉴,我是刑警寧澤履磨,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站庆尘,受9級特大地震影響剃诅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驶忌,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一矛辕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧付魔,春花似錦聊品、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妻坝,卻和暖如春伸眶,著一層夾襖步出監(jiān)牢的瞬間惊窖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工厘贼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留界酒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓嘴秸,卻偏偏與公主長得像盾计,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赁遗,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349