2014年5月27日 星期二

Unity 4.5 更新資訊

Unity 4.5 更新資訊
功能
圖形相關功能:
匯入Shader改善了許多項目:
匯入Shaders更快速, 特別是複雜的曲面Shaders. 避免在匯入Shader的時候編譯可能的平台Shader變數, 現在只會編譯需要的指定平台. Shader編譯的結果會放在 Library 文件匣, 所以編譯會變快.
錯誤報告改進. 錯誤報告會回報在正確的行數,也會反映在相同黨名,副黨名為.cginc的文件.
表面 shader 除錯優化. 不會再有 "#pragma debug" 錯誤訊息; 可以在檢視界面點選 "Show generated code" .
新增 Sparse 貼圖支援 (也叫"mega 貼圖 或 "tiled 貼圖"). 這是一個低階API功能, 可以查詢SparseTexture class.
新增 stereoscopic 方式在 DX 11.1 著色(需要Windows 8.1 和支援的硬體).
iOS裝置現在支援 OpenGL ES 3.0 (從A7晶片開始).
圖形: 支援OpenGL ES 3.0的3D貼圖.
模組管理:

可更新的模組管理器,支援iOS,Android, Windows Phone 8, Blackberry,Unity插件透過在Preferences選單旁的模組選單,就可以不用下載整個編輯器單獨更新插件模組.

編輯器功能:
新的Hierarchy視窗排序方式 - 排序方式現在改為基於transform的順序而非名稱.
推出新的編輯器API AssetDatabase.FindAssets (string filter, string[] folders). 按照文件名稱,類型和資源標簽搜尋資料庫. 更多資料請參考文件.
增加Selection.assetGUIDs 從專案管理找到指定的物件. 在兩欄的模式下他也會選擇所在目錄.
2D 物理功能:
增加 2D Joint 圖示.
增加新 2D 物理元件: WheelJoint2D.
Unity Remote 更新:
Unity Remote 4 是我們推廣iOS和Android測試方案. 在 Unity 4.5, iOS設備上Wifi的延遲問題將會得到改善. 此外, 我們增加了對於iOS更全面的支援,包含陀螺儀,速度儀和鏡頭的支援. Unity Remote 4 現在可以免費在Asset Store和Google Play下載.
Mecanim 功能:
AnyState的Transitions上新增 CanTransitionToSelf 選項.
新增新的腳本函式Animator.Rebind(). 當你改變了Hierarchy裡的遊戲物件時,你可以用此功能來手動重新綁定動畫數據.
針對人形骨架, 在輸入界面可以指定一個節點作為Root motion給動畫片段使用. 這個變換節點將會自動覆蓋由Mecanim算出來的Root motion. (Pro Only).
Windows Store apps 功能:
增加指南針的API,用來檢查羅盤精確度.
AppCallbacks 的方法 InvokeOnUIThread和InvokeOnAppThread將會檢測是否鎖死並報錯. 增加 TryInvokeOnUIThread和TryInvokeOnAppThread, 他會回傳 true 或 false 來替代.
支援用程式來打開觸碰鍵盤.
在Player Preferences 裡增加對資源縮放的支援: splash screen, medium 和 wide tile, store 和 small logos等.
在Player Preferences 裡增加對 Windows 8.1 資源縮放和相關設定的支援.
用來改變系統游標的新 API - AppCallbacks::SetCursor, AppCallbacks::SetCustomCursor, WSA.Cursor.SetCustomCursor.
增加Windows 8.1上改變螢幕解析度的支援.
其他功能:
腳本: DisallowMultipleComponentAttribute 不允許同類型的元件被加到單一遊戲物件.
腳本: 新增UnityEngine.ISerializationCallbackReceiver 接口, 用來取得序列化前後的Callback.
腳本: 擁有System.Serializable相同結構的屬性現在可以被序列化. 此外, AnimationCurve[]的欄位和 double[] 現在可以被序列化.
Web插件: 增加對於Internet Explorer增強保護的支援,支援IE64位元.
改善項目
2D: 預設 2D shaders 現在可以模擬premultiplied alpha. 這個修正了某些情況下造成的透明貼圖.
2D: Sprite編輯器的Grid功能增加了Padding 和 offset 的欄位.
2D: 當編輯模式是2D的時候,iOS的Sprite 貼圖將不會預設16 位元了.
2D: Sprite 編輯器也可以編輯單張模式的Sprite.
2D: Sprites 現在可已有邊框屬性(以像素為單位) ,可以在Sprite輸入界面修改.
腳本: 矩形的結構現在有min, max 和 size屬性. 這樣可以更容易用同一段程式來重複利用X,Y座標.
Android: 增加 KitKat 到裝置清單.
資源管理: 'optimizeGameObjects' & 'extraExposedTransformPaths' 現在可以從資源後置處理器存取.
Profiling: 聲音分析優化可以獲得更多更精確的分析數據並更有效地利用記憶體.
BlackBerry: bar-descriptor.xml 檔案不再使用過時的XML標簽.
BlackBerry: 現在支援鍵盤的類型.
BlackBerry: 型號Z30的裝置現在支援GLES 3.0.
腳本: 增加LayerMask.GetMask 方法用來回傳多圖層的名稱的遮罩.
Coroutines: StopCoroutine 現在可以用一個列舉參數.
文件: 增加如何用Visual Studio來除錯DirectX11 shaders, 請查閱'SL-Debugging DirectX 11 Shaders with Visual Studio'.
文件: API 歷史更新.
文件: 新的外觀.
編輯器, 單機模式: WWW 物體現在可以檢索壓縮檔的內容(gzip or zlib).
編輯器: 增加 'Sprite' 到專案瀏覽裡的彈出過濾視窗.
編輯器: 建立CustomPreview屬性和 ObjectPreview 類別. 現在可以增加額外的自訂預覽物件.
編輯器: 建立SelectionBase屬性. 當指定到一個腳本時,擁有這個腳本的物件會和從場景選取的指定的prefab母體一樣作用.
編輯器: 一次編輯多個資源標簽.
編輯器: 移出EditorGUI.MultiFloatField 和 EditorGUI.MultiPropertyField.

超過450項更新,請參閱原文網站
http://unity3d.com/unity/whats-new/unity-4.5

2014年5月26日 星期一

Unity 腳本的未來發展


【技術分享】Unity 中腳本的未來發展
2014-05-26 原文作者: 


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

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

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

• C# 運行時效能仍不如 C/C++
• Unity 的當前版本 Mono 不支援最新的 .NET 版本功能
• 同時要維持 23 個平台轉換結構,在移植、維護以及保證功能與效能都達到最好需要投入大量精神。
• 執行時,垃圾回收可能會導致暫停。

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

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

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

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

      從根本上來說它不同於及時編譯,因為 IL2CPP 編譯器會將程式轉換成 C++ 源始碼,然後再利用標準 C++ 編譯器來產生原生二進制文件。
      
       在執行時也會把 IL2CPP 虛擬機所提供的其它服務帶過去(如 GC、中繼資料、平台資源)。

IL2CPP 的優勢

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

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

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

• C++ 編譯器和連結器提供了大量之前沒有的進階優化功能。
靜態分析是用於優化大小和速度的程式上執行的。
Unity 為中心的腳本執行時優化。
      雖然 IL2CPP 還處於發展階段,但初期的測試已經可預期未來的發展很棒。

.NET 升級
      我們經常收到希望我們升級.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不做的
      IL2CPP 並不是對整個 .NET Mono 工具進行重新改寫。我們將繼續使用 Mono C# 編譯器(之後可能還會用到Roslyn)。 也會繼續使用 Mono 類別庫。 目前對 Mono 預編譯器有效的所有功能和第三方資源庫也會對 IL2CPP 相容 我們只是嘗試提供一個虛擬機和預編譯器的替代產品,我們還將繼續利用性能卓越的 Mono 專案

何時才能體驗 IL2CPP
       現在我們希望您也像我們一樣,對即將來臨的 IL2CPP 感到興奮,迫切地想知道何時才能使用 IL2CPP 
IL2CPP 的最初版本將在 Unity 5 WebGL 發佈的部分看到。

       除了 WebGL 之外,我們還在繼續為Unity其他發佈平台開發 IL2CPP 事實上,我們已經在許多我們支援的平台上進行了一些工作。 預計將在年末至少再推出一個平台。 目前的計劃是讓 iOS 成為下一個載有 IL2CPP 支持的平台。
等到 IL2CPP 可在多個平台上使用並且成熟之時,計劃的 Mono 工具升級將會接踵而來。

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

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


接下來?
       我們仍在為 IL2CPP 埋頭苦幹的實現新功能、優化程式轉換、修復漏洞並支援更多平台。 隨著發展我們將繼續發佈更多官方消息與您分享。


2014年5月2日 星期五

幾個好用的Shader介紹

原文:Kristyna Paskova, Unity Technologies

Shader永遠是不嫌多的,不管你是追求逼真的3D圖形或是給小朋友玩的卡通遊戲,Shader肯定是一大幫手,如果你也這麼認為,那Asset Store可以幫你大忙.

雖然Unity 5將會將Shader設計變得更容易,但Asset Store上仍有許多超優套件可以在很多情況下派上用場,我們現在想要介紹幾個在Asset Store上五星等級評價但你可能漏掉的套件

Candela SSRR: Advanced Screen Space Glossy Reflections by Livenda

這個套件可以製作出非常漂亮的真實反射,換句話說,它是一個優化過用來製作的光跡追蹤反射的解決方案,非常容易使用,可以在你的遊戲裏面針對光亮的表面精確地控制光線,相當棒!

Depth of Field Mobile Shader by Barking Mouse Studio 

如果你用Unity Pro製作3D手機遊戲,你一定要看看這個套件,他就像一個帶有光圈調節的鏡頭,可以讓你在儘量減少記憶體消耗的情況下所見即所得的控制景深


Planets by NexGen Assets

這個很棒的套件具有diffuse和specular貼圖,同時也可以控制星球上雲和夜間燈光的透明度或光暈的角度,像是大型星雲等等包含宇宙冒險需要的星系和恆星

Mobile HDR by Science Laboratory

用來快速的調整場景明亮度,大大優化效能和縮短開發時間,這個HDR光暈和亮度校正工具可以自行定義檢視,並包含完整的C#和Cg原始碼,完全解決了許多人的痛苦!


Lens Dirtiness by David Miranda

你想製作一個賽車遊戲並希望讓玩家感覺身歷其境?看看這個專為Unity Pro搭配的後製套件,支援PC版或手機遊戲的鏡頭髒污和耀斑濾鏡,重點是比一個披薩還便宜!

著作人