注意:該版本是單獨升級C#編譯器的測試版!請使用文中提供的下載連接!html
基於Unity 5.3.5p8的C#編譯器升級!下載連接閉包
試用該版本前請先備份項目,遇到任何問題請及時反饋到Unity官方中文社區(http://forum.china.unity3d.com/)。框架
新升級的Mono C#編譯器(對應Mono 4.4)將用於編譯全部的C#腳本。
編輯器
Unity編輯器及播放器所使用的Mono運行時還未升級。
新編譯器仍針對C# 4。是舊的編譯器也支持的版本。
新編譯器目標框架爲.Net 3.5,也是以前支持的框架。oop
這只是升級Mono/.Net邁出的第一步。測試
該升級應該可以「正常工做」,它並未添加任何新功能。不會對現有項目帶來任何影響,還有些小益處。新的Mono和C#編譯器與以前相比運行速度廣泛更快,並且修復了多年以來的Bug。插件
理論上有可能在運行時產生奇怪的問題。但咱們本身測試的過程當中並未發現。3d
大多數狀況下都會在編譯時發現問題。目前爲止咱們遇到的狀況有:
有些無效的C#代碼是舊的編譯器容許但新的編譯器會報錯的
涉及到編譯器特定屬性(安裝目錄、名稱等)的代碼或插件會出錯調試
另外,若是你常常使用MonoDevelop或VSTU(Visual Studio Tools for Unity)調試C#代碼,那歡迎向咱們反饋你遇到的任何問題。編譯器輸出結果應該是一致的,但調試器可能對於某些生成的代碼模式會很敏感。code
新編譯器有一處已知的重大變化,就是閉包獲取foreach變量的方式,這是由C#語言團隊作出的改變。也就是說,以下代碼將輸出「b a r」而非目前的「r r r」:
var actions = new Action[3]; var j = 0; foreach (var c in "bar") actions[j++] = () => Console.WriteLine(c); foreach (var a in actions) a();
使用較新的VS或Mono均會獲得這樣的結果,這也是目前WSA平臺所表現的行爲,具體細節請看:
https://msdn.microsoft.com/en-us/library/hh678682(v=vs.110).aspx
某些狀況下是的,問題描述請看:
http://stackoverflow.com/questions/18552669/memory-allocation-when-using-foreach-loops-in-c-sharp
對Array、List
第一步咱們但願先推出新的編譯器。將來再啓用新的C#特性。
支持C#語言新特性面臨的幾個問題:
目前的生態系統不能徹底把控新的C#(腳本更新器、調試器、特定的MonoDevelop/VisualStudio版本)
目前仍以舊的.Net 3.5爲目標框架。在舊框架上支持新的C#或多或少會致使些迷惑。從頭開始編寫全部代碼也許可行,但對於已有代碼來講可能須要C#語言和框架都是最新才能夠。