Windows Store與Unity入門
(本文是 “Getting started on Windows Store with Unity” 文件的簡單中譯版本,出處為Unity官網中對 Unity 遊戲建置為 Windows Store/Windows Phone App 的四份正式文件其中之一)
入門: Windows Store與Unity
本文件將持續更新以提供最即時的資訊。若有此文件未能解決之處,請嘗試至Unity Windows Developer Forum中搜尋或發問: https://forum.unity3d.com/forums/50-Windows-Development
簡介
Unity 4.3 ,以及更新的版本,已讓移植Unity遊戲至 Windows Store變得更加容易。
這份文件是為Unity開發人員所寫,提供他們將現有的Unity遊戲移植為Windows Store App所需要的概觀資訊。此文件並未包含所有技術細節,但它能指引您正確的方向並提供相關的外部連結,以獲取進一步的詳細資訊。
移植 (porting) 一個Unity 遊戲至Windows Store遊戲
要開發、編譯您的Unity 遊戲並提交到 Windows Store ,您將需要:
- Unity4.3: Unity免費版本或Unity Pro都可,兩者皆內建免費的 Windows Store和 Windows Phone add-ons 給所有的Unity開發者。
- Visual Studio: 您可以使用任何 Visual Studio SKU,包括免費的 Visual Studio Express版本。若要移植至 Windows 8.1 將需要 Visual Studio 2013 ;若要到 Windows 8 則可以使用 Visual Studio 2012。這兩種版本可以在同一台電腦上一併安裝並執行。
- Windows 8.0 或更高的版本: 即便您未購買 Windows 8,您也可以在https://dev.windows.com 取得 90 天的免費評估版。如果您是在Apple的機器上執行 Mac OS X ,可以有幾種選項讓您選擇以執行Windows,例如Boot Camp, VMWare 或是Parallels等。若您的目標是 Windows 8.1,則您必須在 Windows 8.1 中開發。其實,我們建議的執行環境是在Windows 8.1上執行Visual Studio 2013,原因是這樣的環境可以讓您自由選擇要移植至Windows 8或是Windows 8.1。附帶一提的是,從 Windows 8.0 升級到 Windows 8.1 是免費的,而且可直接由Windows Store中進行升級。
- Microsoft Account: Microsoft Account是免費的,可由以下網站申請 https://signup.live.com,有此 Microsoft 帳戶即可獲取免費的開發許可(Developer License)。
- Windows Store 帳戶: 這是在您要將遊戲上架至 Windows Store時的需求。您可選擇要註冊為個人或公司帳戶,一旦完成註冊後則可同時提交至 Windows Phone Marketplace。個人帳戶註冊費用為$19,公司帳戶為$99 。(譯註: 學生身份或新創公司則可享有第一年免年費優惠,可分別至https://DreamSpark.com 及https://BizSpark.com 申請)
- Windows 測試機: 您可以在所有執行 Windows 8.0/8.1 的任何設備上進行開發及測試,Visual Studio 內建的模擬器可以模擬諸如多點觸控、各種螢幕解析度等情境;但是,我們仍建議您在具有觸控及運行Windows RT (ARM-based CPU)的實體機器上測試您的App。理想的選擇包含Surface RT 或Surface 2。
移植概述
要準備移植至Windows Store,您可由以下領域熟悉其流程:
- 設計階段 — — Unity Editor 經驗
- 編譯階段 — — 從Unity Editor 生成 Windows Store App
- 執行階段 — — 執行 Windows Store App
設計階段 — — Unity Editor 經驗
您將繼續使用所熟悉的Unity編輯器來移植遊戲至Windows Store App,這會提升您的工作效率。
在遊戲設計階段的程序是相同的,您在Unity編輯器內的Mono執行環境(run-time)中設計並執行您的遊戲。只有在您要編譯成 Windows Store專案時會注意到一些差別: Unity將使用Windows Store的.NET core (核心)來進行編譯。這裡提到的.NET core是.NET 的一個子集,因此,您可能會遇到一些編譯錯誤,其原因即來自於某些API存在於Mono的執行環境中,但並不存在於.NET core之中。若遇到這種情形您將得改寫程式碼使其能順利執行。移植技術的詳細資訊,請閱讀Porting tips for Windows Store with Unity這份文件。 ( 譯註,或參閱以下部落格文章的step-by-step解決方法 : https://blogs.msdn.com/b/mengtsai/archive/2014/01/16/unity-game-to-windows-store-compile-error-missing-namespaces-classes.aspx )
一旦成功編譯為Windows Store專案後,您即可以直接使用 Visual Studio 打開所生成的 Windows Store解決方案並進行debug。
另一個可能的差異,是發生在使用shaders和graphics功能的時候,原因是這兩項是硬體相依的功能;例如,若您在編輯器中使用PC的硬體功能設定,其硬體功能當然遠勝於ARM-based的 Windows RT 設備。而若要在設計階段時模擬實際的設備功能,請使用Unity的圖形模擬(Graphics Emulation- 位於Edit功能表)來選擇適當的目標平臺。
在Unity專案中包括 Windows Store程式碼
如果您有一些程式碼,是要在Windows Store環境下才執行,但在Unity Editor環境下不該被執行的話,可以使用 #if (UNITY_METRO & &!UNITY_EDITOR) 這個pre-processor指令。 (譯註: 自Unity 4.3.3起,若要編譯為Windows 8.0請使用UNITY_METRO_8_0,若為Windows 8.1請使用UNITY_METRO_8_1。https://unity3d.com/unity/whats-new/unity-4.3.3 ) 。這將確保程式碼僅在所生成的Windows Store App內執行。其中!UNITY_EDITOR 是在處理於Editor中執行File->Build Settings切換到 Windows Store App時的情境。另外,請注意在Unity編輯器中執行的程式碼是不能引用 Windows run-time (WinRT) 中的 API的。WinRT API 包括了一些針對Windows 8/8.1平台的特別功能,如尋訪檔案系統及SkyDrive、使用動態磚(Live Tiles)或Contracts等;要使用這些API的話,可以在建置為Windows Store專案中後,於Visual Studio中來實作以上項目。
編譯階段-從Unity Editor 生成 Windows Store App
您將透過File -> Build Settings來切換您所要建置的遊戲執行平台:
您將看到右側有幾個新的選項,以下是關於這些選項的詳細資訊:
選擇Windows Store的類型 (Type)
在Type的下拉清單中您可以在 Direct3D11 和 XAML 之中作選擇,同時也可以在C# 或 C++語言間作選擇。我們建議先選擇XAML ,這可讓你在所見即所得的 XAML UI 設計畫面中,快速建立啟始畫面(splash screen)、設定(Settings)等各項 UI 元件。若選擇Direct3D & C++ 會生成較底層的執行元件,會有最好的執行效能,但是會犧牲一些 UI 元件設計時的整合功能而拉長設計時間。
有關這些選項的更多資訊,請參閱以下連結:
- Developing Windows Store Games - 概述了 DirectX 平臺功能的文章。
- Unlocking the Power of DirectX in Apps that use XAML - 解釋如何無縫整合 DirectX 與 XAML。
選擇 SDK
在Unity 4.3 您可以選擇要生成 8.0 或 8.1 版本的Windows Store App。
由於 Windows 8.1 已發佈,我們建議您選擇此為所有新遊戲的最新版本。然而,在本文件推出之時 (Nov 2013),仍有許多執行 Windows 8.0 的使用者。若要讓您的遊戲可以在8.0或8.1上皆能執行的話,您可以:
- 直接生成一個 Windows 8.0 遊戲而不使用8.1的新功能。在此情形下您將以8.0的版本提交到Store,上架後不論是執行 8.0 或 8.1 的使用者將能夠安裝並執行它。或者:
-針對8.0 和 8.1生成兩個Visual Studio 專案。在這情形下您將提交兩個遊戲套件(packages)至Store,任某版本作業系統上的使用者將只能看到其各自版本的遊戲。這種方式的優點在於可在8.1的專屬套件上新增8.1的特別功能(如Big Tile等),缺點則是需要同時控管兩種版本。
更多資訊請見:
Windows Store – What’s new or update in 8.1
Migrating Windows Store apps to Windows 8.1
Player Settings的設置和.Net 核心編譯
在Player Settings選項中,你會發現右側多了許多設定的選項以生成您的 Windows Store方案。這些設定會出現在您的Visual Studio專案中的manifest設定檔中。您可以直接在此設定應用程式名稱、 預設logo圖示、所需要的平台功能等。
其中請注意一個重要的設定,在Compilation Overrides的下拉選單中,其預設值是”Use Net Core”。
此預設值是要確保在編譯時,Unity中的所有scripts(但不包括 /Plugins 資料夾),都被編譯成.Net 核心設定檔。若您是做用C#的話這會是建議的設定。而如果您是使用 UnityScript (或是Boo)則將不能選擇.NET Core;這情形況Unity將使用Mono的編譯器,但仍然生成可通過Windows Store認證的assembly。
應指出的是,在這個編譯的過程中(按下Build後) 會忽略在 /Plugins 資料夾內的外掛程式及二進位檔案,也就是說即便您成功生成了Windows Store專案,您可能仍會在執行階段或上架Windows Store的驗證過程中遇到問題。
若要知道協力廠商的外掛程式是否相容於 Windows Store ,可以使用 Xamarin提供的線上工具免費掃描: https://scan.xamarin.com。
Windows Store專案和 Visual Studio-開發流程
以上我們提到所有可能遇到的問題,請參閱 Windows Store Porting Techniques 這份技術白皮書的Getting your app to compile in Unity章節中(第4~6頁),有更多如何解決 API 與相關錯誤的說明。
一旦您已經解決了任何編譯時的錯誤,Unity將匯出一個專案檔,你將會使用 Visual Studio 打開、測試、執行並發布你的遊戲,亦即以下的兩個步驟:
1.從Unity生成專案。(File -> Build Settings,選擇Windows Store App -> Build)
2.在Visual Studio 中編譯為可上架Windows Store的二進位檔案
值得注意的是,每次以 Unity生成專案的時候,你可以每次都選擇相同的資料夾,這樣並不會覆寫到任何已在Visual Studio中所作過的修改。Unity將只更新的以下資料夾及檔案:
1. 在您專案中的/Data資料夾
2. 專案中的reference assemblies
亦即,您可以直接於Visual Studio 改變專案、添加更多功能、更改manifest或設定檔,即便您之後在Unity中更改了遊戲內容也不會丟失這些在 Visual Studio 中所作的改變。
另外要注意的是,如果您是更動了Unity的專案檔 (比如新增Plugins 或 references),您將需要手動合併您的 Visual Studio 專案檔案。
(本文僅譯至原文件的 Porting Overvew 章節)