天天看點

Unity 腳本的未來發展

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t0">新技術之IL2CPP</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t1">Unity 中腳本的現狀</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t2">IL2CPP 簡單介紹</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t3">IL2CPP 的優勢</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t4">性能</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t5">NET 更新</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t6">可移植性和維護</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t7">垃圾回收</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t8">什麼是IL2CPP不做的</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t9">何時才能體驗IL2CPP</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t10">接下來</a>

<a href="http://www.cnblogs.com/zhaoqingqing/p/3842690.html#t11">資料</a>

最近,我們談到了Unity 的WebGL 。 在那篇文中我們簡要談論到腳本在 WebGL  中的運作的新技術稱為“IL2CPP” 。然而IL2CPP 所代表的不隻是适用于WebGL 的腳本解決方案,同時也是我們自己為了在更多平台上執行 .NET時能有高效能的方案。

在深入探究未來之前,讓我們先談談現在吧。

我們利用Mono (以及在 Windows Store App 和Windows Phone 上的WinRT )讓C#變得容易使用,存取第三方資料庫并最接近原生平台的效能。但是仍然有些挑戰必須要解決:

• C# 運作時效能仍不如C/C++

• Unity 的目前版本Mono 不支援最新的.NET版本功能。

•同時要維持約 23 個平台轉換結構,在移植、維護以及保證功能與效能都達到最好需要投入大量精神。

•執行時,垃圾回收可能會導緻暫停。

在過去幾年中我們試圖解決這些問題,但是進展不大。 同時針對WebGL 支援腳本的研究開始。 随着這兩項研究的深入,我們将這兩條路徑合二為一。

問題範圍明确,我們為了解決這問題嘗試了各種不同實驗。有些方法有希望解決問題,有些則否。最終我們發現了一個創新的解決方案,這正确方向就是  IL2CPP 。

      IL2CPP 由兩部分組成: 一個預先編譯器( Ahead of Time (AOT) compiler) 和一台虛拟機( Virtual Machine (VM) )。

這兩部分意味着我們對通用語言基礎結構( Common Language Infrastructure) 的實作,類似于.NET 或Mono 。 它與Unity 中目前的腳本相容。

從根本上來說它不同于及時編譯,因為IL2CPP 編譯器會将程式轉換成C++ 源始碼,然後再利用标準 C++ 編譯器來産生原生二進制檔案。

在執行時也會把 IL2CPP 虛拟機所提供的其它服務帶過去(如GC 、中繼資料、平台資源)。

<b></b>

我們再來談談前面所提到的每個問題,看看IL2CPP 如何一一解決。

      IL2CPP會在基于 C# 的易用性和高效性的同時,帶來C++ 的卓越性能。

      目前有效率的腳本工作流保持不變,同時提升性能。 我們已經測試過在一些腳本很多的程式中性能提升了2 至3 倍。這種性能提升要歸功于幾個因素。

• C++ 編譯器和連結器提供了大量之前沒有的進階優化功能。

• 靜态分析是用于優化大小和速度的程式上執行的。

• 以Unity 為中心的腳本執行時優化。

雖然IL2CPP 還處于發展階段,但初期的測試已經可預期未來的發展很棒。

我們經常收到希望我們更新.NET版本的請求。 盡管.NET 在過去幾年取得了一些進步,Unity 對C # 編譯器和類别庫目前仍支援.NET 2.0/3.5 時代的功能。 許多使用者要求要把新功能加入好讓他們的程式和第三方資源庫使用。

随着IL2CPP 的日益成熟,我們會将更新 Mono C# 編譯器、類别庫和編輯器(由于版本開發快速取代,編輯器不會轉換到IL2CPP )到最新版本。 這将為Unity 帶來一個現代版的.NET 。

同樣值得一提的是,我們正與微軟合作将現有和未來的.NET 功能放入Unity ,以確定相容性和效能。

雖然這個部分聽起來像是一個應由Unity 處理的問題,但它也會對開發者産生影響。Mono 虛拟機擁有大量的平台和結構相關的程式碼。 當我們把Unity釋出到一個新的平台時,我們将為該平台投入大量的精力來移植和維護Mono 虛拟機。

不同的功能(以及Bug)可能存在于不同平台。 這将會影響到Unity想要為開發者創造的價值,就是我們希望開發者可以輕松地将相同内容部署到不同平台。

IL2CPP 以多種方式解決這些問題:

• 所有的程式都改為轉換 C++ ,而非結構不同機器的代碼。 移植和維護所産生的成本就可以得到更清楚的資料。

•新功能開發和Bug維護的速度會更快。 對我們而言,本來要花幾天時間處理不同平台的結構轉換變為花數分鐘更改C++轉換流程。 功能及Bug修複可立即用于所有平台。

照目前情況來看,如果支援IL2CPP可以在很短的時間内移植到新平台。

此外,統一化編譯器的性能優化絕對遠遠優于一個一個維護不同的程式轉換器。 這使我們能夠重複利用已經導入 C++ 編譯器的功能,而不需要重新做一個。

      IL2CPP 并沒有連接配接任何一個垃圾回收器,而是開了一個API接口。 目前的版本中,IL2CPP 使用的是libgc 的更新版。除了​​GC 本身,我們也正在研究通過IL2CPP 編譯器中完成的分析來減少GC 壓力。

雖然此刻隻有這些資料與開發者分享,但研究仍在持續在進行。 我們知道會有很多人關心這個發展,是以我們不會松懈并會保持提供最新消息。

與IL2CPP 無關,但偷偷地透露在垃圾回收的情況,Unity 5 .x  将會有越來越多無需配置設定的API 。

      IL2CPP 并不是對整個.NET 或Mono 工具進行重新改寫。我們将繼續使用Mono C# 編譯器(之後可能還會用到Roslyn )。 也會繼續使用Mono 類别庫。 目前對Mono 預編譯器有效的所有功能和第三方資源庫也會對IL2CPP相容。我們隻是嘗試提供一個虛拟機和預編譯器的替代産品,我們還将繼續利用性能卓越的Mono專案。

現在我們希望您也像我們一樣,對即将來臨的 IL2CPP 感到興奮,迫切地想知道何時才能使用 IL2CPP !

IL2CPP 的最初版本将在 Unity 5 中WebGL 釋出的部分看到。

除了​​WebGL 之外,我們還在繼續為Unity其他釋出平台開發IL2CPP 。 事實上,我們已經在許多我們支援的平台上進行了一些工作。 預計将在年末至少再推出一個平台。 目前的計劃是讓iOS 成為下一個載有IL2CPP 支援的平台。

等到IL2CPP 可在多個平台上使用并且成熟之時,計劃的Mono 工具更新将會接踵而來。

有一個平台永遠不會受IL2CPP 支援,那就是WebPlayer,這是因為安全隐憂。 是以如前面所提的,Webplayer編譯器仍将繼續使用Mono 。

現在就可以看到IL2CPP執行時的效果。我們之前釋出的兩個WebGL Demo就是支援了 IL2CPP 。

<a href="http://beta.unity3d.com/jonas/DT2/">Dead Drigger 2 IL2CPP範例</a>

我們仍在為IL2CPP 埋頭苦幹的實作新功能、優化程式轉換、修複漏洞并支援更多平台。 随着發展我們将繼續釋出更多官方消息與您分享。

本文轉自趙青青部落格園部落格,原文連結:http://www.cnblogs.com/zhaoqingqing/p/3842690.html,如需轉載請自行聯系原作者