Windows 10 特刊 2015

第 30 卷,第 11 期

本文章是由機器翻譯。

遊戲開發 - 使用 Unity 針對通用 Windows 平台撰寫遊戲

Jaime Rodriguez |Windows 2015

Windows 10 有提供遊戲開發人員和玩家的許多新功能。使用通用 Windows 平台 (UWP),開發人員可以鎖定 Windows 10 平板電腦和電腦、 行動裝置 (也就是電話) Windows 10 Xbox One,HoloLens 以單一的程式碼為基礎。此外,Windows 存放區有交集到一個儲存和 Microsoft 有帶到 Windows 10 Xbox Live 服務以及提高玩家參與跨所有 Windows 裝置系列 Xbox 應用程式。

遊戲開發人員、 Unity 是其中一個最受歡迎的遊戲開發引擎。21 平台的支援,有任何使用中介軟體的最佳的跨平台開發支援今天。其結合的 C# 指令碼、 支援的編輯器可讓極具生產力的遊戲開發環境。使用資產存放區、 Unity 社群和 Unity 廣告、 參與、 與分析的成長功能,它從未如此容易開發沈浸式的遊戲。

當星星對齊時,我們必須撰寫有關它! 這篇文章將提供您需要取得您的 Unity 遊戲執行絕佳 Windows 10 的所有詳細資料。這不是簡介 Unity 或 UWP 應用程式的簡介。我們假設您已經熟悉這些主題和相反地,我們將著重於說明與 Windows 10 已變更的內容並建立絕佳的通用 Windows 遊戲 (UWGs!) 所需的 「 必須知道 」 的秘訣。我們會執行這項實用的方法,帶您逐步完成我們對呼叫 Chomp 範例遊戲的一些變更 (請參閱 [圖 1) 來最佳化 Windows 10。

Chomp
[圖 1 Chomp

啟動 chomp 身為寫入使用 Unity 的 Windows 8.1 遊戲。您可以看到在螢幕擷取畫面 [圖 1, ,它是很簡單的迷宮遊戲類似 Pac 本性難移建立此範例示範如何撰寫使用 Unity,遊戲因此簡單是機碼的開發人員的指南。但是,變得可用的 Windows 10 和支援新作業系統的 Unity,Chomp 必須先更新。您可以找到的原始程式碼在 Chomp bit.ly/UnityChomp。下載並依照我們的旅程。

若要取得 UWP 版本遊戲中,我們可以只匯出 Windows 10 設定檔使用 Unity 的遊戲,但這並不會產生 Windows 10 的運作的方式的最佳化應用程式。它不會處理在視窗、 全螢幕模式中執行、 觸控式等等。所以讓我們看看我們採取這遊戲從 Windows 8.1 Windows 10。

使用者入門 (必要條件)

UWP 應用程式 (和 UWGs) 需要開發和測試 Windows 10 與 Visual Studio 2015。任何 Visual Studio 2015 版本可以讓一切建立您的遊戲,包括 Visual Studio 社群 2015年免費 !

您需要在 Unity 一邊 Unity 5.2.1p2 或更高版本。Unity 5.2 現在安裝 Visual Studio 社群 2015年] 和 [Visual Studio 2015 工具 Unity (VSTU),以便在實務上,若要開始所有您需要安裝是 Unity 和安裝程序期間檢查正確的選項。請參閱 [圖 2 如需詳細資訊。

Unity 安裝正確的選項可讓您一切開始著手
[圖 2 安裝 Unity 與正確的選項可讓您一切開始著手

注意: 程式開發人員使用 Mac、 新的替代方案是使用 Unity 專案的 Visual Studio 程式碼編輯器。您可以尋找在該選項的詳細 bit.ly/UnityVSCode

專為 Windows 10 建置

Windows 10 棟建築物依照完全相同的程序與您已熟悉。沒有新的 SDK 目標 UWP 應用程式在 Windows 市集平台 (請參閱 [圖 3),這會將遊戲匯出為 UWP 應用程式。

目標為 Windows 10 從 Unity
[圖 3 為目標從 Unity 的 Windows 10

以下是一些重要的項目在開發 Windows 10 和 UWP 匯出期間發生底下:

  • 有新 UNITY_UWP 和 UNITY_WSA_10_0 前置處理器可讓您 「 量身訂做 」 您的遊戲邏輯和 UWP 的經驗。
  • Unity 5.2 現在包含較少的型別比前版的新簡化的 WinRTLegacy DLL。與 Windows 10 Microsoft 有回到數種類型.NET 核心設定檔進行一些因應措施 WinRTLegacy 包含不再需要。
  • Unity 5.2 正在使用 Unity 5 中引入新外掛程式模型。這可大幅簡化您的工作流程所參與的外掛程式如您所見本文稍後。
  • Unity 5.2 包含實驗支援 DirectX 12 隨附於 Windows 10。若要嘗試的實驗支援開啟 Unity 中的播放程式設定、 取消核取自動圖形 API 選項並且手動 Direct3D12 支援。

新的專案範本

Unity 建置程序現在會產生與 UWP 相容的 Visual Studio 2015 專案。您可能已經知道有一些重大的變更到這個新的專案系統。

例如,每個 UWP 應用程式現在隨附自己的.NET 核心應用程式內的複本以便總是取得您測試的.NET 版本。要做到這一點 Unity 會產生適當的.NET 「 片段 」 透過 NuGet 會提取適當 project.json 檔案。

此外,UWP 應用程式使用.NET 原生應用程式下載到客戶機器並導致更快的啟動時間和低耗電量遊戲之前產生最佳化的原生機器碼。這些最佳化影響將視您的遊戲的複雜度但它們絕對不會損及效能。與.NET 原生唯一要注意的是它會導致 (會大幅提升) 較長的編譯時間在 Visual Studio 內。一般的應用程式的 Visual Studio 只編譯使用.NET 原生 「 發行 」 組態的專案。Unity 的產生的專案檔類似的方法實作與使用.NET 原生編譯只"Master"的組態。如果您不熟悉 Unity 的組態目標,有三個:

  • 偵錯是具有任何最佳化的完整的偵錯專案。
  • 版本是以最佳化、 編譯專案,但它包含程式碼剖析工具支援。
  • 主要是存放區,因為它有沒有偵錯程式碼、 啟用所有的最佳化和程式碼剖析支援去除應該提交的組態。

您絕對應該要編譯和測試使用.NET 原生在開發週期的早期。Unity 會執行許多進階中繼語言 (IL) weaving,因此如果有任何一種強調.NET 原生至其最完整的應用程式,它是 Unity 遊戲。若要確保項目按預期方式,請留意對 [輸出] 視窗中的警告期間.NET 原生編譯。

在執行階段上述差異很大,但新 Unity 範本進行這些變更透明您身為開發人員,讓我們專注於如何調整及 Windows 10 波蘭文遊戲。

量身訂做和 windows 10 修改您的遊戲

一種程式碼基底跨多種外型規格是 UWP 的主要功能但說到遊戲,可能仍會有一些量身訂做和最佳化所需的特定的外型規格。最常見的包括: 輸入機制 (例如觸控、 鍵盤、 滑鼠和遊戲台)。視窗調整大小。最佳化資源和資產。和實作原生的平台整合 — 例如動態磚、 通知或 Cortana — 與每個特定的外型規格。我們將探討這些外觀的 UWGs。

Windowing 通用 Windows 應用程式現在裝載於可調整大小視窗而不是執行全螢幕如同在 Windows 8 和 8.1,因此 windowing 現在是為您的遊戲和應用程式的考量因素。這些差異大多屬於 Unity 開發人員為透明因為 Screen.height 和 Screen.width 屬性仍會報告在原生 (像素) 大小的可用空間。

Windows 10 也包含要進入或離開全螢幕的新 Api 和這些集合都會公開透過 Unity 螢幕類別 Screen.fullScreen 屬性設定。視窗化的最佳作法是實作標準的索引鍵加速器来進入或離開全螢幕。這些差異非常大跨發行者,但若要切換全螢幕的常見 accelerator F11 或 Alt + enter 鍵。Chomp,我們要讓玩家此選項可讓我們來切換全螢幕模式中執行下列動作以全螢幕播放:

if (Input.GetKeyUp (KeyCode.F11))
{
  Screen.fullScreen = !Screen.fullScreen;
}
if (Input.GetKeyUp (KeyCode.F11))
{
  Screen.fullScreen = !Screen.fullScreen;
}

讓多個視窗桌面引進 Windows 10 遊戲的另一個必要的變更: 您必須處理焦點的變更。在多重視窗桌面如果您的遊戲視窗沒有焦點,您應該暫停遊戲和音樂,因為使用者可能會與不同的視窗互動。Unity 抽象化此相同的 API 會公開在其他平台互動: OnApplicationPause 方法。這個方法稱為上所有作用中 MonoBehaviours 焦點已變更。我們處理這 Chomp 中所示 [圖 4

[圖 4 焦點變更時暫停遊戲

public void OnApplicationPause(bool pause)
{
  FocusChanged(!pause);
}
public void FocusChanged(bool isFocused)
{
  if (isFocused)
    musicSource.UnPause();
  else
  {
    musicSource.Pause();
    GameState.Instance.SetState(GameState.GameStatus.Paused);
  }
}

請注意有是上的不對稱: 當遊戲失去焦點時,遊戲和音訊都會暫停但當它收到著重我們取消暫停僅限聲音。這是因為遊戲時暫停遊戲,我們也顯示已暫停的對話方塊在遊戲本身,並繼續焦點時,等候使用者確認他想要繼續遊戲。對話方塊會處理設定遊戲狀態至從暫停執行。

完成這些變更兩個之後,我們會適當地處理輸入/結束全螢幕和視窗失去焦點時暫停遊戲的能力。

輸入 Unity 的舊版 Windows 遊戲中曾經絕佳支援輸入和這與 Windows 10 尚未變更。滑鼠、 觸控及遊戲台維持所輸入的類別和輸入管理員 Unity 的整齊抽象化。

最重要的是来記住關於輸入是確保您正在實作任何數量的輸入為適合您的遊戲的機制。Chomp,我們要支援鍵盤、 遊戲台和觸控式。請記住 UWGs 可以執行每個地方,因此提供最佳的輸入/遊戲體驗您可以在播放程式。我們看到輸入解決最常見的問題是如何偵測如果需要顯示觸控式控制項 (例如虛擬搖桿或方向鍵) 正在執行的電話等觸控裝置中。

若要判斷是否應該顯示觸控搖桿的方法之一是以判斷遊戲是否正在執行在電話上。因此,它是很合理的搖桿會顯示與預設為啟用。若要判斷特定的平台 (例如 phone 或 Xbox) 上是否正在執行遊戲,您可以檢查是否實作適當的合約。這是 Chomp 偵測到執行 Windows 10 Mobile:

public static bool IsWindowsMobile
{
  get
  {
    #if UNITY_WSA_10_0 && NETFX_CORE
      return Windows.Foundation.Metadata.ApiInformation.
        IsApiContractPresent ("Windows.Phone.PhoneContract", 1);
    #else
      return false;
    #endif
  }
}

請注意在這段程式碼中我們使用 UNITY_WSA_10_0 前置處理器來判斷是否我們要編譯 Windows 10。沒有這項檢查程式碼會在非 Windows 10 組建編譯失敗。

所有具有虛擬搖桿可見時間是一種方法但可能會比較好的選擇只顯示搖桿時使用者實際使用觸控式裝置上。Windows 10 包含新的 API 來判斷使用者是否正在執行 Windows 10 在 Tablet 模式 (觸控) 或傳統桌面模式 (滑鼠/鍵盤): Windows.UI.ViewManagement.UIViewSettings.UserInteractionMode。這個 API 必須執行 Windows UI 執行緒,以便從 Unity 內您必須封送處理至 UI 執行緒呼叫。我們所示的程式碼加入 [圖 5 至 Chomp 來判斷使用者的應用程式使用觸控互動。

[圖 5 程式碼來判斷使用者是否使用觸控

public static bool IsWindows10UserInteractionModeTouch
{
  get
  {
    bool isInTouchMode = false;
#if UNITY_WSA_10_0 && NETFX_CORE
    UnityEngine.WSA.Application.InvokeOnUIThread(() =>
    {
      isInTouchMode =
        UIViewSettings.GetForCurrentView().UserInteractionMode ==
        UserInteractionMode.Touch;
    }, true);        
#endif
    return isInTouchMode;
  }
}

現在我們可以實作這兩個方法,以更新 Chomp 進行時顯示搖桿來猜測。如果在行動裝置上執行遊戲或使用者互動模式是觸控,UseJoystick 會傳回 true,而且我們顯示搖桿:

public static bool UseJoystick
{
  get
  {
    return (IsWindowsMobile || IsWindows10UserInteractionModeTouch) ; 
  }
}

視窗化和處理的輸入,我們可以立即移至利用新的原生 Windows Api 將更多的功能新增至我們的遊戲。

原生 windows 10 整合: 平台 Light-up Unity 遊戲中從作業系統的原生整合處理先前的相同方式: 如果您要編譯使用 Unity (使用 NETFX_CORE 前置處理器) 中的.NET 核心編譯選項,您可以內嵌原生程式碼做為示範我們前一個範例。

如果您想要加入的程式碼是多個您想要內嵌或行為需要來抽象化 (跨平台),您仍然可以使用外掛程式。Windows 10 (也就我們的一部分) 的 Microsoft 開發人員經驗遊戲推廣團隊已經開啟來源使您更輕鬆地整合與 Windows 10 的數個新外掛程式。您可以找到這些外掛程式在 bit.ly/Win10UnityPlugins。目前,已經共用下列外掛程式:

  • 存放區: 外掛程式的應用程式內購買支援應用程式模擬器、 消耗、 家用品和回條的存放區。一切 transact 向 Windows 市集隆重推出。
  • AzureMobile: Microsoft Azure 的外掛程式與基本的建立、 讀取、 更新、 Azure 儲存體刪除 (CRUD) 作業。
  • 核心: 「 核心 」 外掛程式可提供這類核心作業系統功能的原生整合動態磚、 本機通知、 推播通知和 Cortana。
  • 廣告: 外掛程式會包裝新 Windows 10 Microsoft 廣告 SDK、 現在與視訊 interstitials 的支援。

先前 Chomp 沒有應用程式內購買因此我們決定將它們加入至使用外掛程式市集的遊戲。現在,Chomp 有購買消耗 (boosters) 和家用品 (mazes) 的支援。

這些外掛程式使用最簡單的方式是從 GitHub 下載 Unity 封裝匯入使用資產 Chomp |匯入封裝 |自訂套件中 Unity 編輯器。一旦匯入封裝時,您必須適當 Unity 增益集資料夾中的二進位檔。安裝之後,二進位檔位於 Plugins\WSA 目錄中。Unity 使用於編輯器,讓那些也會包含並複製到增益集資料夾本身需要預留位置組件 (與 Microsoft.NET Framework 3.5 相容)。

在匯入封裝之後, 我們現在可以參考 Chomp 內從存放區 Api。我們先呼叫 Store.LoadListingInformation,提供回呼方法執行完成時,若要取得購買列出所有可用的項目。如果呼叫成功,我們逐一查看傳回的 ProductListing 項目並使用這些屬性來擴展價格在我們的 UI 中所示 [圖 6

[圖 6 應用程式內購買列出可用的項目

void Start()
{   
  Store.LoadListingInformation(OnListingInformationCompleted);
  ...
}
void OnListingInformationCompleted(
  CallbackResponse<ListingInformation> response)
{
  if (response.Status == CallbackStatus.Success)
  {
    ListingInformation result = response.Result;
    PopulatePrices(result.ProductListings);
  }
}

一旦使用者選取他想要購買的項目,執行交易是只要幾行程式碼。[圖 7 顯示我們加入購買持久 (新 mazes 遊戲) 的程式碼。

[圖 7 應用程式內購買

public void OnDurablePurchase(GameObject buttonClicked)
{
  string productId = GetProductId(buttonClicked.name);
  if (!string.IsNullOrEmpty (productId))
  {
    Store.RequestProductPurchase(productId, (response) =>
    {               
      if (response.Status == CallbackStatus.Success)
      {
        // response.Status just tells us if callback was successful.
        // The CallbackResponse tells us the actual Status
        // as returned from store.
        // Check both.
        if (response.Result.Status == ProductPurchaseStatus.Succeeded)
        {
          EnableLevels(productId);
          return;
        }                 
      }
    });
  }
}

如您所見,它是直接使用這些新的外掛程式來實作原生功能。

送出至存放區

提交至 Windows 市集是比以往更容易。您現在可以提交一個包含所有的二進位碼檔案的單一封裝或您可以在必要時提交每個平台/架構、 封裝。

如果您想要分割您的封裝或只在特定平台上支援您的遊戲,您可以手動編輯 package.appxmanifest 檔案並調整 TargetDeviceFamily 項目:

<Dependencies>
  <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" 
    MaxVersionTested="10.0.10240.0" />
</Dependencies>

有三個可能的裝置系列:

  • Windows.Universal: 這可讓部署符合硬體需求的任何地方的二進位檔。
  • Windows.Mobile: 這應該用於進入 Windows 10 Mobile Sku,也就是 Windows Phone 的二進位檔雖然未來可能會有其他小型裝置 (6 英吋或更小) 的不是電話並執行此 SKU,因此不會假設它是只是電話。
  • Windows.Desktop: 這應該用於只能在桌上型電腦和平板電腦播放的遊戲。

如果您想要行動和桌面但不是主控台或 Windows 其他更新家族為目標,您可以有兩個裝置系列資訊清單中,像這樣 (取代"x"和"y"適當地) 中:

<Dependencies>
  <TargetDeviceFamily Name="Windows.Mobile" MinVersion="10.0.x.0"
    MaxVersionTested="10.0.y.0"/>
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.x.0"
    MaxVersionTested="10.0.y.0"/>
</Dependencies>

請注意您可以針對每個裝置系列有不同的 MinVersion 和 MaxVersions。這很方便未來 Windows 10 Mobile 將隨附於 Windows 10 桌面比更新的版本號碼。不過,現在我們建議您保留預設版本 (10.0.10240.0)。

如先前所述當我們討論.NET 原生、 提交您的封裝時,請確定您送出主要組態。此外,我們建議您將完整的程式資料庫 (PDB) 符號檔案包含當機分析。新的存放區沒有下載本機分析它們的封包的選項。相反地,您必須提交至 Windows 存放區中,您 Pdb 和存放區會為您提供的工作堆疊追蹤的損毀 (請參閱 [圖 8)。

包括程式資料庫符號檔
[圖 8 包括程式資料庫符號檔

最後,當您提交到 Windows 市集開發人員入口網站透過,請確定您選擇正確的硬體組態。現在可讓您指定的硬體需求,例如觸控或鍵盤,所以您的遊戲只安裝在正確的裝置上的存放區 (請參閱 [圖 9)。

開發人員入口網站中可用的硬體喜好設定
[圖 9 硬體喜好設定提供開發人員入口網站

也有很多!

本文提供簡短 「 什麼的幕後新 」 給 Unity 開發人員藉由顯示我們如何移植到 Windows 10 我們簡單的遊戲並加入一些新功能。我們有限的空間,我們著重於基礎架構和遊戲特定"必須 dos"而不顯示在 Windows 10 平台的每一項新功能。如果您想要有絕佳的沈浸式遊戲,請考慮利用上桌面、 Cortana、 新的動態磚範本和新 Xbox Live 服務 Api (以磁碟機參與) 新通知中心等其他功能。與 Windows 10 Microsoft 逐漸開放 Xbox Live 服務的存取。您不需要撰寫主控台遊戲 — 您只需要有絕佳遊戲上執行 Windows 10 並想要利用服務例如排行榜、 成績追蹤、 跨裝置播放等等。若要套用的存取,註冊將 ID@Xbox 程式 xbox.com/id

Unity 的 visual Studio 2015 工具

Unity 包含 Visual Studio 2015 工具從 5.2 版本開始,針對 Unity (VSTU),讓 Visual Studio 在 Windows 上的 Unity 專案的新預設程式碼編輯器。這項變更將會改善的 IntelliSense,語法色彩編碼編輯器和絕佳 C# 偵錯工具中。若要設定預設指令碼編輯器,選取 [編輯] |喜好設定] 功能表選項 Unity 編輯器中。您的選擇可能包括 MonoDevelop (內建) Visual Studio 2015、 Visual Studio 2013 或瀏覽進一步選項的選項。

VSTU 也包括幾個捷徑多 Unity 輕鬆地撰寫程式碼。比方說,如果您以滑鼠右鍵按一下 MonoBehaviour 類別內,內容功能表必須新的實作 MonoBehaviours 項目,這可讓您快速將 MonoBehaviour 方法簽章插入您的類別。

在該相同的內容功能表中還有快速 MonoBehaviours 項目,它會執行類似的功能但較不干擾對話方塊讓您輸入的方法名稱與您要搜尋的項而重新插入簽章。這兩種方法是從快顯重要加速器甚至更快速地使用 (Ctrl + Shift + M 和 Ctrl + Shift + Q) 存取。

編輯器增強功能之外使用 VSTU 時的最佳功能之一是簡化的偵錯工具整合使用 Unity 編輯器。Unity 專案在 Visual Studio 中開啟時,您會自動看到標準的偵錯] 工具列中的偵錯 」 附加 Unity"按鈕。[圖 A] 顯示此按鈕位於何處。此按鈕會自動尋找 Unity 編輯器的程序並附加到它。從該處便可以順暢地設定中斷點、 分析變數值並執行其他大多數項目預期與 Visual Studio。VSTU 甚至還有實驗支援例外狀況的中斷。如需 VSTU 2.0 功能的更多詳細資料,請參閱部落格文章"Visual Studio 工具的 Unity 2.0,"在 bit.ly/VSTUInfo

注意: 如果您不是針對 Windows 10 並使用 Visual Studio 2013,沒有為 Visual Studio 2013 Community Edition 使用者帶來我們這裡所述的所有迴可下載的套件。您可以下載此延伸模組在 bit.ly/VSTU2013


Jaime Rodriguez領導 Microsoft 開發人員經驗遊戲推廣團隊。您可以在 Twitter 上找到他: @jaimerodriguez 和他的部落格 jaimerodriguez.com

Brian 查看是 microsoft 的資深的遊戲開發人員推廣者。他是死硬派玩家和開發在 Windows、 主控台和其他任何項目只要他可以記住可以程式設計的遊戲。您可以找出他在開發人員會議全國各地或在 Twitter 上追隨他: @BrianPeek 和他的部落格 brianpeek.com

感謝以下的微軟技術專家對本文的審閱: Sanjeev Dwivedi 和 Adam Tuliper
Sanjeev Dwivedi 是 microsoft 的資深的遊戲開發人員推廣者。與他連絡 sanjeev.dwivedi.net

Adam Tuliper 是 microsoft 的資深技術推廣者。在 Twitter 上達到他 @AdamTuliper