本文章是由機器翻譯。

Unity

使用 Unity 及 C# 開發您的第一款遊戲,第 4 部分

Adam Tuliper

歡迎來到最後一篇文章中我對統一遊戲開發的系列。App 市場第一次爆炸還記得嗎?每個人都是追趕這一潮流,並為所有應用程式。許許多多的應用程式,不過,來到人們的煩惱已經找到您的應用程式。迷失在市場上的應用程式是非常現實的問題,對於開發人員來說。Windows 應用商店/Windows Phone 商店不是這個星球上最主要的市場。這意味著你不應該為它開發嗎?絕對不是。開發人員真正有機會在這裡要他們使用的應用程式。我聽說有他們經常推薦的應用程式的開發人員。我知道確切地三人有過這會發生在其他平臺上,和我交談很多開發人員從所有平臺。

在這篇文章,我看看取出來在統一到 Windows 開發的遊戲的過程。過程非常簡單,並允許您做是相對容易實現在遊戲中一些很酷的平臺集成。以及提供統一 4.5,支援新的通用專案 (為 Windows Phone 和 Windows 應用商店與共享代碼生成包的解決方案),是一些優秀的工具。

當你工作時,請記住這通俗的說法在心目中,"測試早,經常測試"。你不可能聽到一個更好的軟體發展咒語,然後它非常適用于遊戲開發我想雖然略有修改它:"早在設備上測試,經常測試設備上"。無論哪種平臺,你會發現設備有可能採取行動預期的不同。

平臺

如果你正在閱讀這本雜誌,你可能有一個想法 Windows 生態系統。我只會做團結支援這一生態系統中的一個快速回顧。你可以針對 Xbox 360、 Xbox 一、 Windows Phone 8/8.1、 Windows 8/8.1 (Windows 應用商店應用程式) 和桌面。你可以選擇所有這些目標中除了 Xbox 統一的免費版本。你會看到 Xbox 列在配置的生成選項,但不是能生成到它,除非你是一個 Xbox ID 程式中。為 Xbox 360,您必須註冊經核准的發佈伺服器。如果你正在對超級酷的東西,請查閱 ID 程式在 xbox.com/Developers/id。 Windows Phone 和 Windows 應用商店有非常相似的生成過程。

請記住,Windows Phone 和 Windows 應用商店有以下生成選項:Windows Phone 8 通過 Silverlight ; Windows Phone 8.1 通過 Silverlight 或 Windows 運行時 (WinRT) ; Windows 8 ; Windows 8.1 ; 針對 Windows Phone 8.1 和 Windows 8.1 的通用程式。

Windows 建設

從統一製作的生成是實際上相當簡單。對於本地測試,它只是撫養生成對話方塊 (檔 |生成設置),按一下生成,並選擇輸出檔案夾。生成和運行選項在連接的電話或您的本地系統,具體取決於您的選擇上編譯後啟動你的遊戲。那是它在一個基本的水準。在成功生成後您選擇的資料夾中將打開一個可執行檔或Visual Studio解決方案。在主控台視窗中,將顯示錯誤,所以它總是一個好主意,要通過視窗功能表中打開它。如果您沒有打開主控台視窗,您必須記得看看非常深的底部狀態列的單個行的紅色消息編輯器視窗。它有點隱蔽的但是一旦你知道它在那裡,你不會忘記它。

為所有生成統一運行您的生成與它所調用的一名球員和它支援的球員在前面說過的所有不同的平臺。當你創建你的遊戲版本時,您需要添加你想要每個的場景生成中。若要載入 (除了第一個載入預設情況下) 你遊戲中的各種場景,您可以使用 Application.LoadLevel,採用一個場景的名稱,例如 Application.LoadLevel("Level1") 或 Application.LoadLevel(2) 等指標。我不是一個風扇使用索引方法,因為你會看到,現場訂購可以輕易改變。

您要在代碼中載入每個的級別必須添加到您的生成。在生成設置對話方塊中,您將添加無論你想要通過"添加當前"按鈕或通過拖放到生成對話方塊中的場景檔的生成中的場景。在這裡,您可以重新排列它們,以及 (這,再一次,使得載入場景通過索引危險因為他們可以很容易得到重新排序)。您可以通過啟用或禁用任何生成這些場景選中或取消選中它們。作為圖 1 所示,步驟如下:

  1. 添加到生成的場景。
  2. 確保選中所需的場景。我經常檢查測試場景,包括在本地生成,取消選中它為最終的構建。
  3. 突出顯示要為其生成的平臺。
  4. 按一下交換器平臺到觸發器統一準備您的資產為選定的平臺,使平臺 — —­特定的預處理器常量,如 UNITY_METRO、 UNITY_IPHONE、 UNITY_WEBPLAYER,等等。
  5. 到一個特定于平臺的包構建你的遊戲。

向生成添加場景
圖 1 向生成添加場景

針對 Windows 桌面獨立 (桌面) 生成是預設設置,當您打開統一。與此生成統一使用單聲道來編譯您遊戲的程式集,並打包與運行時引擎。你得到的可執行檔和一切都打包到其中的資料夾。此生成非常簡單,正如最桌面生成。

為 Windows 應用商店和 Windows Phone 這是樂趣開始,和我的意思是它的位置。將匯出到 Windows 應用商店和 Windows Phone 時,你可以做一些很酷的平臺集成。可以使用一個活的瓦片誘使使用者來回到你遊戲的免費遊戲學分,發送文本消息、 使用地理圍牆以及更多。需要注意的主要事情是比較容易將特定于平臺的功能集成到你的遊戲。

生成過程有點有別于桌面生成,雖然你還可以快速生成和運行從對話方塊並得到運行 Windows 應用商店或很快用於測試 Windows Phone 應用程式。

若要瞭解特定于平臺的代碼在哪裡可以融入你團結的遊戲,看看如何統一編譯您的代碼。運行在統一編輯器中的代碼是由單一的行貨版本編譯的。這意味著您不能像地理位置 WinRT (Windows 應用商店/Windows Phone 8.1) API 呼叫在編輯器中,在運行您的遊戲時如有具體的 WinRT 方法中單不存在。同樣,也有中單在 Windows 運行時,如雜湊表和傳統.NET 檔訪問通過 System.IO 中不存在的功能。 有很多重疊單聲道和 Windows 運行時,但他們不同的 Api,所以期待一些差異。

當您生成專案為 Windows 應用商店時,統一使用 Microsoft.NET 框架來編譯遊戲的程式集。預設情況下它使用.NET 核心來編譯您的程式集,其在本質上 WinRT.NET 是什麼。你只需要告訴 Unity 來編譯特定于平臺的代碼編譯為該特定的平臺時,只有方法。

有兩種主要方式使用特定于平臺的代碼在這裡。(還有第三種技術被稱為一座橋,連線之間團結和Visual Studio解決方案代碼的行為,但它遠低於通常使用,本文不再贅述)。第一種方法是使用一個外掛程式。 你可以寫你自己的這是相當瑣碎的或下載一個來自幾個好的資源。在撰寫本文時,prime31.com 外掛程式為 Windows 應用商店和 Windows Phone 是免費的。幾乎每個主要的發佈伺服器,使用統一的遊戲專案中使用外掛程式。得到這些而你可以,這是一個相當驚人的交易。

使用特定于平臺的代碼

通過外掛程式中統一的外掛程式模型庫的兩個版本使用相同的方法簽名。一個基本上是庫的存根 (stub) 版本的你對.NET Framework 3.5,放置在 Assets\Plugins\YourPlugin.dll 編譯。 這是統一使用你的遊戲在編輯器中運行時的版本。為您的目標的平臺編譯另一個 — — 說 Windows 應用商店或 Windows Phone — — 和被包裝成你的遊戲從統一,創建一個構建時如中所示圖 2

號樓與特定于平臺的代碼通過一個外掛程式
圖 2 號樓與特定于平臺的代碼通過一個外掛程式

特定于平臺的圖書館被放置在 Assets\Plugins\ < 平臺 > \YourPlugin.dll (平臺可以是 Windows 8.x 版、 iOS、 Windows Phone 8 等等)。如果你有一個理由,來創建一個你自己,而不是下載一個現有多,查閱 bit.ly/1EuLV1N 的基本方向。(外部 API,路線的平臺) 的外掛程式之間的主要區別是,你把特定于平臺的 dll 放在哪裡。你可以找到外掛程式的地點 bit.ly/1v2ml1m

使用 prime31 外掛程式之一在這裡設置一個活的瓦片很簡單,將在代碼附加圖 3 到任何遊戲在你的場景中的物件。SettingsPane 和瓷磚類都包含用於實現特定于平臺的代碼功能的外掛程式。

圖 3 Prime31 外掛程式代碼

public class WindowsStoreAppSettings : MonoBehaviour
{
  private void Start()
  {
#if UNITY_METRO // A preprocessor directive to run when Windows Store
                // build is selected in Unity.
  SettingsPane.registerSettingsCommand("Privacy Policy",
    "This is my privacy policy. Consider a url as well to bring you to the site.");
  // Set the live tile. You can set a source as an Internet URL, as well.
  // This is not the Unity assets folder.
  // You'll want to make sure this image appears in the
  // generated Visual Studio project because it won't get
  // pushed from Unity in any way.
  var images = new string[] { "ms-appx:///assets/WideLiveTile.png" };
  Tiles.updateTile(TileTemplateType.TileWideImage, null, images);
#endif
  }
}

通過預處理器指令還可以使用預處理器指令來啟用或禁用內聯代碼編譯。這是一種常用技術,當共用平臺之間跨多種技術的代碼也很經常用於統一遊戲。使用此方法,您只是使用指令在您的代碼的類。預處理器指令可以用於各種目的。要記住的重要的規則是:您的代碼分隔平臺與平臺特定的預處理器指令 ; 一些預處理器指令變得活躍的時刻你切換平臺在統一生成設置 (如 UNITY_METRO) ; 一些活躍只有在編譯外部編輯器 (NETFX_CORE) ; 別人可能可用 (例如,對統一版本、 UNITY_4_5 和其他您定義的自訂指令的檢查) 的所有時間。

我會告訴你使用一些 Windows 特定于平臺的代碼的示例。如果我想要訪問 Windows 運行時中的地理位置,我可以直接在我 MonoBehavior 派生的類中包括此代碼 (如中所示圖 4),可以被分配到任何的遊戲­物件。因為在單編輯器中編譯此代碼時,它將失敗並且不將其包在預處理器指令。我們需要告訴的 Unity 在編輯器之外僅編譯此代碼。您可能想知道 NETFX_CORE 和 UNITY_METRO 之間的區別是什麼。前者是一種編譯設置,只有當你遊戲的程式集進行編譯的 Windows 運行時使用。後者用於當你已經選擇 Windows 應用商店作為平臺的統一生成設置。這可以在 C#、 UnityScript 或建築物條例執行處代碼中處於活動狀態。我個人比較喜歡 NETFX_CORE 指令來換我的 WinRT 代碼,而不是 UNITY_METRO,NETFX_CORE 只是提供出口/建造和 UNITY_METRO 是活躍在編輯器中,只要您在生成設置切換平臺。這意味著代碼可以運行在編輯器,可以是一個問題,如果它包含一個特定于平臺的 API 中。您可以添加其他方向­代表在同一線如 & & !UNITY_­編輯器,但我更喜歡只是 NETFX_CORE。

圖 4 使用地理定位

public class FindLandTarget : MonoBehaviour
{
// If you’re compiling for the Windows Runtime, use this code
// to GeoLocate on object collision.
#if NETFX_CORE
  void OnCollisionEnter(Collision collision)
  {
    Debug.Log("Collided with " + collision.gameObject.name);
    GetGeoLocation();
  }
  async void GetGeoLocation()
  {
    // Must call geolocation on the UI thread, there's a UI piece to be shown.
    UnityEngine.WSA.Application.InvokeOnUIThread(
      async () =>
        {
        var locator = new Windows.Devices.Geolocation.Geolocator();
        var position = await locator.GetGeopositionAsync();
        Debug.Log(string.Format("{0}, {1}  Accuracy: {2}",
          position.Coordinate.Latitude, position.Coordinate.Longitude,
          position.Coordinate. Accuracy));
        }, false
            );
    /**/
  }
#else // When you’re not using the Windows Runtime, use this collision code instead.
  void OnCollisionEnter(Collision collision)
  {
    // Non-Windows Runtime platforms, no geolocation.
    Debug.Log("Collided with " + collision.gameObject.name);
  }
#endif
}

組建

統一將編譯您使用.NET 框架,具體 Windows 運行時的 Windows 應用商店和 Windows Phone 8.1 的代碼。它不使用 Windows Phone 8.1 為 Silverlight。然而,Windows Phone 8 中的代碼被編譯為 HH,為 Windows Phone 的 Silverlight 包不出所料。

團結會編譯您遊戲的程式集,並創建你反過來將使用創建最終生成的Visual Studio解決方案。換句話說,除了做桌面生成時,你需要做你最後彙編Visual Studio中前向 Windows 應用商店或 Windows Phone 存儲發送你的遊戲。生成的Visual Studio解決方案包含統一的二進位檔案打包在一起你遊戲的程式集和基本的 XAML / C# 或 c + + 主機應用程式。每次你生成從統一,統一所覆蓋的唯一的東西是您資料檔案夾。任何自訂的代碼或其他對你Visual Studio解決方案所做的更改不會覆蓋在將來生成從統一過程中。

Windows 應用商店和通用應用程式生成

我會看看 Windows 存儲區中顯示的生成選項圖 5。在統一的 Windows 應用商店組建類型包括 Windows 8、 Windows 8.1、 Windows Phone 8.1 和通用的解決方案,其中包含 Windows Phone 8.1 和 Windows 8.1 專案和一個共用的專案,如中所示圖 6。此外注意到統一 C# 專案中的核取方塊圖 5。這是一項非常有用的功能,我強烈推薦。它將創建Visual Studio解決方案與包含統一代碼的附加專案,如中所示圖 7。你真正能一定程度上改變在這些專案中的代碼,在編譯時Visual Studio會要求統一重新您遊戲的程式集,而無需再做完整的生成,從統一。這意味著您可以在您最後的Visual Studio解決方案,是令人驚異的平臺調試編輯統一代碼 — — 這意味著你不必每次進行的代碼更改,重新構建您從統一的解決方案。

號樓為 Windows 應用商店
圖 5 號樓為 Windows 應用商店

通用應用程式與共享的專案
圖 6 通用應用程式與共享的專案

額外專案
圖 7 額外專案

當 Unity 生成您Visual Studio解決方案時,有幾件事情需要注意。首先,您的 Windows 應用商店專案將預設 (撰寫本文時) 為 ARM 生成平臺,不 x 86。當您嘗試生成並運行因為你會得到一個錯誤您的系統不是 ARM 體系結構中,這可能是非常令人困惑的。雖然我建議你創建生成為 ARM 和 x86,為本地測試你會想要選擇 x 86 若要避免該臂錯誤。此外,在撰寫本文時,沒有 64 位球員統一為 Windows 應用商店或 Windows Phone 上。如果你有一個幾的手臂 Windows 8 設備,如表面 1 或表面 2 (RT 不臨 ; Pro 是一個基於 x86 的系統),然後用一切手段選擇的手臂,和如何做遠端部署和調試它。然而,大多數開發人員使用基於 x86 的 PC 進行本地測試。

接下來,您會注意到組建組態類型包括調試、 大師和發佈選項。這是對比典型.NET 應用程式,其中包括僅調試和發佈。調試版本是最慢的。它包含調試資訊,並且還支援統一探測器 — — 用於優化遊戲的 Pro 版本中的性能工具。發佈版本全面優化,但也支援統一探測器。母版生成是您提交到每個商店。這是優化、 生產準備的版本,它不支援統一探測器。當我第一次測試的遊戲時,我選擇主控形狀生成所以我的裝置能表現真實的想法。

對於 Windows Phone 的兩種主要選擇是生成為 Windows Phone 8 還是 Windows Phone 8.1。Windows Phone 8 應用程式將運行在 Windows Phone 8.1 設備上,很好,雖然特定于平臺的代碼的代碼共用策略是 Windows Phone 8.1 大得多,因為你可以針對通用的應用程式,它與 Windows 應用商店應用程式共用大約 90%的空氣污染指數。對於一個典型的遊戲,但是,這種代碼共用可能沒有太多的含義,除非您正在編寫特定于平臺的代碼。

一旦你有了您的解決方案,在Visual Studio,它打包和發送到存儲區任何 Windows Phone 或 Windows 應用商店應用程式相同。Windows 應用商店開發者帳戶是一項要求 ; 你支付一次,有的生活。提交過程已被覆蓋,很多次,但對於一個快速概述見"發佈到 Windows 應用商店"(bit.ly/Za0Jlx),發佈的 Windows Phone 軟體商店"(bit.ly/1rdDCwR) 和"為什麼和如何向港口你統一遊戲到 Windows 和 Windows Phone"(bit.ly/1ElzrcL)。

播放機設置討論了統一至 Windows,大廈的基本過程,但不敢看您如何可以設置圖示、 飛濺螢幕、 應用程式名稱和其他所需物品。這些可以發現在播放機的設置,從生成設置螢幕載入並允許您配置 Windows 應用商店和 Windows Phone 的應用,主要的所有設置,如中所示圖 8。您可以指定初始螢幕、 應用程式名稱、 發行者、 編譯設置、 圖示、 應用程式功能,如定位服務和幾個其他設置在這裡。這些設置會下推至您構建您的解決方案從統一你Visual Studio解決方案第一次。

播放機設置為 Windows 應用商店
圖 8 播放機設置為 Windows 應用商店

應用程式圖示統一為您的應用程式提供了一些預設圖示,因此它將建立在Visual Studio。您必須更改這些預設圖示或風險未通過認證。團結使它很容易可以看到什麼圖像,你可以設置你的專案,但為每個平臺,以確定哪些圖像認證檔是指的需要。您檢查您的 Package.appxmanifest 檔中Visual Studio(用於 Windows 應用商店和通用的應用程式) 的視覺資產作為統一可能會設置一些預設圖像,你不會替換為您自己,並將需要刪除勢在必行。

在最低限度,Windows 應用商店應用程式需要一個 50 x 50 商店標識、 150 x 150 平方米徽標、 一個 30 × 30 平方米的標誌和 620 x 300 閃屏時,Windows 開發人員中心上所述 (bit.ly/1vIJsue)。Windows Phone 8 應用程式要求應用程式清單圖像和圖像的開始螢幕的小型和中型的預設磁磚 Windows 開發人員中心上所述 (bit.ly/1oKo8Ro)。Windows Phone 8.1 應用程式需要預設的應用程式清單圖像影像填滿,以及。商店 (據說這是統一與 Windows 10) 請問對於一些其他圖像期間提交,如螢幕擷取畫面。

如果你要提供只是一個單一的形象開始螢幕瓷磚,則應提供圖像縮放到 240%為 Windows Phone 存儲應用程式和 Windows 應用商店應用程式根據 Windows 開發人員中心 180%(bit.ly/1nzWber)。

順便說前, 陣子我寫了一個樸實無華的實用程式來説明生成圖像為 Windows 應用商店應用程式。查閱在 bit.ly/ImageProcessor

重建和覆蓋 記得統一覆蓋只是你在你Visual Studio專案的資料檔案夾 (請參閱 圖 9)。這是一把雙刃劍。您可以在任何時候以團結等等設置閃屏時,圖示,(和我建議這樣做),但如果你已經過生成您Visual Studio解決方案,包含這些設置的 Package.appxmanifest 檔不會覆蓋的下次生成從統一。您必須手動設置的視覺的資產,能力等等在Visual Studio解決方案中的 Package.appxmanifest 檔 ; 或建立一個新資料夾和 diff 的資料夾結構,使用 diff 工具 (如 BeyondCompare ; 或刪除您Visual Studio解決方案,如果你在它有沒有自訂的代碼,讓團結重新生成它。我通常選擇第三個選項,因為我不斷努力在 Unity 中配置我圖示和初始螢幕圖像。我只是要記得帶我到我的Visual Studio解決方案的自訂活影像填滿在。如果您正在構建 Windows Phone 8 (但不是 8.1),圖示必須設置Visual Studio中無論如何 ; 這是不從統一推送的少數事情之一。

Visual Studio專案中的資料檔案夾
圖 9 Visual Studio專案中的資料檔案夾

總結

生成過程是非常簡單的。提出了生成設置,按一下生成,打開解決方案,部署。我展示了用於自訂您通過外掛程式和預處理器指令的生成選項。您可以調用特定于平臺的代碼外單,因為你有某種力量在你的指尖。Don忘了要簽出的是目前免費的 Windows 平臺的統一外掛程式 prime31.com。它們允許您輕鬆地集成到平臺功能只需幾行代碼。第 9 頻道為一些新咬大小統一培訓內容 (想想 10 分鐘視頻) 上和在構建的平臺遊戲的許多迷你提示我通道 9 博客上照看。下次再見 !

額外的學習


Adam Tuliper 是與生活在陽光明媚的加州的微軟高級技術福音傳教士。他是獨立遊戲開發公司管理員的奧蘭治縣團結 Meetup 和 Pluralsight 作者。他和他的妻子將要歡迎他們第三個孩子,所以向他伸出雖然他仍然有時間,就在 adamt@microsoft.com 或在 Twitter 上 twitter.com/AdamTuliper

衷心感謝以下技術專家從統一對本文的審閱:湯瑪斯 Dirvanauskas、 Ignas Ziberkas、 Tautvydas Žilys