開始使用 Unity 和 Google Play 遊戲電腦版

1. 簡介

Google Play 遊戲標誌

上次更新時間:2022 年 10 月 18 日

如何為 Google Play 遊戲電腦版準備遊戲?

透過 Google Play 遊戲,您可以輕鬆將行動遊戲移植到 Windows 電腦上,進而提高玩家參與度並擴大客群,無須重新設計遊戲架構或調整商業模式。不過,您仍需進行一些變更,盡可能為新電腦玩家提供最佳體驗。

課程內容

本程式碼研究室涵蓋規定檢查清單的基本部分,可協助您開始開發遊戲,並為 Google Play 遊戲電腦版準備自己的 Unity 遊戲。本文未涵蓋更深入的整合,例如 Play 遊戲登入和 Play Integrity API。

  • 如何從 Unity 建構 x86 架構。
  • 如何測試及部署至 Google Play 遊戲模擬器。
  • 如何修改使用者介面,讓應用程式在電腦上看起來更精美。
  • 如何偵測您是否在 Google Play 遊戲模擬器中執行遊戲,並據此調整遊戲。

軟硬體需求

2. 做好準備

開啟或建立新專案

  1. 使用 2D Platformer Microgame 建立新專案,或開啟自己的專案。

Unity

  1. 在專案中,依序選取「File」->「Build Settings」,並確認您已設定為建構 Android 版本。

Unity

3. 準備 Google Play 遊戲模擬器

請先下載模擬器

安裝完成後,您應該會在視窗中看到 Android 桌面:

Google Play 遊戲模擬器視窗的螢幕截圖。畫面上會顯示 Android 主畫面。

這是功能齊全的高效能 Android 環境,適合用於遊戲開發。在 Android Debug Bridge (adb) 中,這應該會顯示為 localhost 上的裝置:

❯ adb devices
List of devices attached
localhost:6520  device

您需要使用最新版的 adb 才能偵測模擬器。Android Studio 隨附的版本可以運作,但 Unity 隨附的 adb 可能無法運作。模擬器會隨附相容版本,您可以在 C:\Program Files\Google\Play Games Developer Emulator\current\emulator 找到。為獲得最佳開發體驗,建議您安裝 Android Studio,並使用該工具管理 Android SDK。

如果模擬器與 adb 中斷連線,請透過指令列重新連線,如下所示:

adb connect localhost:6520

4. 設定 Unity,直接建構並部署至模擬器 (選用)

Unity 隨附的 ADB 版本可能與模擬器不相容。如要確認,請選取「File」->「Build Settings」,然後檢查「Run Device」對話方塊,看看裝置是否列在其中。

在

視專案、建構程序和熟悉程度而定,您可以選擇設定 Unity,直接部署至 Google Play 遊戲模擬器,或是建構 APK 並使用 adb install 手動部署。手動部署需要最少的變更,但可能會減緩疊代週期。

直接部署至模擬器,只需完成下列兩個步驟:

  1. 設定 Unity 使用其他 Unity SDK,最好是 Android Studio 安裝的 SDK。
  2. 更新 Build Tools 版本,解決 Unity 中的錯誤

由於 Unity 隨附的 Android SDK 版本可能無法偵測到模擬器,因此請使用 Android Studio 安裝較新的 SDK。

  1. 開啟 Android Studio,然後依序選取「Edit」->「Preferences」->「External Tools」。
  2. 取消勾選 Android SDK Tools Installed with Unity,並提供 Android Studio 安裝路徑 (通常為 AppData/Local/Android/sdk)。請勿變更 Android NDK 選項。

以下項目的螢幕截圖:

重新整理連線裝置時,您應該會在建構視窗中看到 Google HPE device (localhost:6520)

身分證件的

這個錯誤的狀態和 Unity 版本而定,您可能也需要變更建構工具版本。如要執行這項操作,請確認您正在產生 mainTemplate.gradlelauncherTemplate.gradle

  1. 開啟「Project Settings」視窗,前往「Player Settings」,然後找到 Publishing Settings 部分。
  2. 向下捲動至「Build」(建構) 選項,然後勾選「Custom Main Gradle Template」(自訂主要 Gradle 範本) 和「Custom Launcher Gradle Template」(自訂啟動器 Gradle 範本),這會在 Assets\Plugins\Android\ 下方產生兩個 Gradle 檔案。

身分證件的

  1. 將字串 **BUILDTOOLS** 的所有例項替換為 30.0.0。在兩個檔案中,程式碼區段現在應如下所示:
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '30.0.0'

5. 部署至 Chromebook (選用)

您可以使用 ChromeOS 裝置,在沒有 Google Play 遊戲模擬器的情況下,開始開發 Google Play 遊戲。與 Google Play 遊戲電腦版類似,Chromebook 也有鍵盤和滑鼠,螢幕也很大,而且提供 x86 設定。我們將搭配 Chromebook 使用 Android Logcat Unity 外掛程式。

  1. 開啟套件管理工具,然後在 Unity Registry 下搜尋 Android Logcat

Package Manager 視窗,

您也需要設定 Chromebook,以便開發 Android 應用程式。首先,請啟用 Linux。

  1. 依序選取「設定」->「開發人員」->「Linux」。

動畫:顯示如何啟用 Linux 支援功能。在「設定」視窗中選取「開發人員」。然後

然後啟用 ADB 偵錯。

  1. 依序選取「設定」->「開發人員」->「Linux 開發環境」->「開發 Android 應用程式」->「啟用 ADB 偵錯」

從「開發人員」選單啟用 ADB 偵錯。

你還需要取得 Chromebook 的 IP 位址。最簡單的方式是

  1. 按一下「網路資訊」圖示,即可取得 Chromebook 的 IP 位址。

Chromebook 上開啟的網路視窗螢幕截圖。

點選網路資訊按鈕,顯示 IP 位址。

  1. 選取「Window」->「Analysis」->「Android Logcat」,開啟 Android Logcat 視窗。

在 Unity 中開啟「Window」>「Analysis」,

  1. 開啟裝置清單。如果目前未連線任何裝置,清單可能會顯示「No Device」。

顯示 Android Logcat 視窗,並選取裝置下拉式選單。

  1. 按一下「其他連線選項」,然後輸入 Chromebook 的 IP 位址。

「其他連線」視窗隨即開啟。輸入 IP 位址。

  1. 按一下「連結」,畫面上應會顯示「Success」視窗:

系統會顯示「

Chromebook 現在會顯示在 Unity 的「執行裝置」清單中 (您可能需要先重新整理畫面):

Unity

您現在可以將遊戲部署到 Chromebook,並在類似電腦的硬體上開始測試及開發。

6. 部署測試版本

Google Play 遊戲要求您部署遊戲的 x86 版本,這是遊戲在桌上型電腦上達到效能基準的方式之一。所有 Unity LTS 變體都可以產生與 x86 和 x86-64 相容的 Android 版本 (標示為「ChromeOS」),而 Unity 2018 以下版本可以產生 x86 版本。如要解鎖這些架構,請先切換至 IL2CPP 腳本後端,您可能已在 arm64 支援的正式版中執行這項操作。

  1. 選取「File」>「Build Settings」,開啟「Build Settings」視窗,然後點選「Player Settings」

身分證件的

  1. 前往「其他設定」部分,然後將 Scripting Backend 切換為 IL2CPP

身分證件的

您也應啟用 x86 或 x86-64 支援功能。如要在 Google Play 遊戲平台上發布遊戲,您只需要支援 x86,但我們建議支援 x86-64。

「Player Settings」的「Configuration」部分螢幕截圖

Unity 隨附的 Frame Pacing 程式庫版本與 Google Play 遊戲不相容,會導致遊戲在啟動時當機。

  1. 如要從「Player Settings」視窗停用影格步調,請開啟「Resolution and Presentation」部分,然後取消勾選「Optimized Frame Pacing」

螢幕截圖

現在可以開始建構了!

  1. 再次開啟「Build Settings」視窗,然後按一下「Build And Run」。遊戲會顯示在模擬器視窗中。

Google Play Games 模擬器的螢幕截圖,

如果無法部署遊戲,請檢查「執行裝置」清單中是否顯示「Google HPE 裝置 (localhost:6520)」。如果缺少這個檔案,請確認 HPE_Dev 正在執行,且您可以看到 Android 主畫面。如果裝置清單中仍未顯示,請使用您使用的確切 adb.exe 執行 adb connect localhost:6520。如果您使用 Android Logcat Unity 外掛程式,請選取「Tools」>「Open Terminal」,開啟與 Unity 相同的 adb.exe 目錄終端機。

身分證件的開啟終端機" highlighted" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96.png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 856w, img/9101ce3c95fb1aa2_960.png 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px">

7. 調整遊戲以支援電腦

盡可能根據與平台無關的指標或特定功能,對遊戲進行變更。舉例來說,Android 玩家可以連接滑鼠和鍵盤,或插入螢幕,因此您可以根據裝置設定變更控制配置或 HUD 元素,在所有支援的平台上充分運用 Google Play 遊戲電腦版。

如果根據玩家是否在 Google Play 遊戲或 ChromeOS 中變更邏輯有意義,這個指令碼可協助您檢查 HPE_EXPERIENCE 系統功能來偵測:

using UnityEngine;

public class GoogleDeviceUtilities
{
#if UNITY_ANDROID && !UNITY_EDITOR
    private static AndroidJavaObject PackageManager
    {
        get
        {
            var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
            return currentActivity.Call<AndroidJavaObject>("getPackageManager");
        }
    }

    public static bool IsChromeOS => PackageManager.Call<bool>("hasSystemFeature", "org.chromium.arc");

    public static bool IsGooglePlayGames =>
        PackageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");

    public static bool HasKeyboard
    {
        get
        {
            var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
            var resources = currentActivity.Call<AndroidJavaObject>("getResources");
            var configuration = resources.Call<AndroidJavaObject>("getConfiguration");
            var keyboard = configuration.Get<int>("keyboard");
            return keyboard == 2; // Configuration.KEYBOARD_QWERTY
        }
    }
#else
    public static bool IsChromeOS => false;
    public static bool IsGooglePlayGames => false;
    public static bool HasKeyboard => true;
#endif
}

電腦的螢幕比一般 Android 手機大,建議 HUD 所佔的畫面面積不要超過 20%。由於許多行動遊戲都使用「Scale With Screen Size」,因此將此設定變更為「Constant Physical Size」或「Constant Pixel Size」,是達成此目標的第一步。

身分證件的

如果您偵測到自己是在 Google Play 遊戲中執行,也可以在執行階段使用 QualitySettings.SetQualityLevel 指令動態設定畫質。Google Play 遊戲模擬器會使用 ANGLE,從 OpenGL Unity 發出原生 DirectX 或 Vulkan 指令,因此您可能會獲得比行動遊戲建構版本更高的圖像保真度。

8. 輸入處理

在 Google Play 遊戲上發布的遊戲應以滑鼠和鍵盤輸入為基礎。您需要規劃如何使用滑鼠和鍵盤與遊戲互動,因此請先花點時間取得 Input SDK unitypackage。如果該頁面未顯示下載選項,請確認您登入的帳戶屬於 play-mp-libs 群組。

為了進行測試,許多遊戲會在編輯器中建構基本的滑鼠和鍵盤控制項,以利開發。如果是在 ChromeOS 裝置上或 Google Play 遊戲模擬器中執行,建議盡可能啟用這些功能。

根據預設,Google Play 遊戲和 ChromeOS 會將滑鼠輸入轉換為模擬觸控。如果您使用 Input.GetTouchInput.touchCount,遊戲仍會照常運作。如果您依賴多點觸控輸入 (例如雙拇指控制或雙指撥動縮放),則需要將動作對應至按鍵。您也應將遊戲內動作對應至按鍵,例如按下 i 開啟物品欄、按下 Escape 關閉對話方塊,以及按下 Enter 傳送遊戲內訊息。

2D Platformer Microgame 使用方向鍵移動,並使用空格鍵跳躍。如果使用自己的遊戲,請確認已設定偏好的按鍵繫結,以便進行下一個步驟。

9. 整合 Input SDK

設定滑鼠和鍵盤控制項後,您需要新增 Input SDK 支援。這有助於玩家透過實用的彈出式視窗探索電腦輸入:

  1. 將 SDK 匯入專案後,請建立名為 InputMappingProviderBehaviour.cs 的檔案,並加入下列內容:
using System.Collections.Generic;
using Google.Play.InputMapping;
using UnityEngine;
using Input = Google.Play.InputMapping.Input;

public class InputMappingProviderBehaviour : MonoBehaviour
{
    private void Start()
    {
        Input.GetInputMappingClient().RegisterInputMappingProvider(new MyInputMappingProvider());
    }

    private class MyInputMappingProvider : InputMappingProvider
    {
        public InputMap OnProvideInputMap()
        {
            return new InputMap
            {
                InputGroups = new List<InputGroup> { },
                MouseSettings = new MouseSettings
                {
                    InvertMouseMovement = false,
                    AllowMouseSensitivityAdjustment = false
                }
            };
        }
    }

    private enum ActionIds
    {
    }
}
  1. 現在,請在 ActionIds 中填入遊戲中使用的動作清單。以 2D Platformer Microgame 為例,動作包括「Left」(向左)、「Right」(向右) 和「Jump」(跳躍):
private enum ActionIds
{
    Left,
    Right,
    Jump
}
  1. OnProvideInputMap 中,為每個動作建立 InputAction。為此,您需要動作名稱、輸入內容,以及要繫結的滑鼠按鈕或鍵碼。以範例遊戲為例:
var leftAction = new InputAction
{
    ActionLabel = "Walk Left",
    UniqueId = (int)ActionIds.Left,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[]
        {
            AndroidKeyCode.KEYCODE_DPAD_LEFT
        }
    }
};

var rightAction = new InputAction
{
    ActionLabel = "Walk Right",
    UniqueId = (int)ActionIds.Right,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[]
        {
            AndroidKeyCode.KEYCODE_DPAD_RIGHT
        }
    }
};

var jumpAction = new InputAction
{
    ActionLabel = "Jump",
    UniqueId = (int)ActionIds.Jump,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[]
        {
            AndroidKeyCode.KEYCODE_SPACE
        }
    }
};
  1. 接著,將這些輸入動作分組。

微型遊戲只有一個群組,但您可以視需要建立多個群組,方便玩家找到所需動作。將此內容新增至 OnProvideInputMap

var movementInputGroup = new InputGroup
{
    GroupLabel = "Movement",
    InputActions = new List<InputAction>
    {
        leftAction, rightAction, jumpAction
    }
};
  1. 將您建立的所有輸入群組新增至輸入對應。修改 OnProvideInputMap 中的回傳陳述式,使其讀取:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. 最後,將建立的指令碼新增至遊戲:

名為「

  1. 再次部署遊戲時,請按 Shift+Tab 開啟遊戲內疊加畫面。

身分證件的

  1. 按一下「控制項」,查看您設定的控制項。

身分證件的

10. 移除內嵌網頁檢視畫面

為提供優質的玩家體驗,請移除嵌入式網頁檢視畫面。內嵌網頁檢視畫面通常用於顯示隱私權政策或服務條款等項目。雖然這些功能可在 Google Play 遊戲中運作,但會顯示在內嵌的「行動」瀏覽器中,而不是玩家偏好的電腦瀏覽器,可能會讓電腦玩家感到困惑。因此,如果您在 Unity 中使用任何擴充功能顯示內嵌瀏覽器,請改用 Application.OpenURL(url)

11. 權限和功能

Google Play 遊戲不支援多項 Android 功能和權限。一般來說,電腦建構版本絕不應彈出權限對話方塊。現在您已準備好建構版本,建議您進行一般的新安裝作業,並記下看到的任何對話方塊,然後加入遊戲提交的「待辦事項」清單。

部分 Unity 遊戲會使用 Android.Permission API 要求權限。您應將這些內容包裝在 if (GoogleDeviceUtilities.IsGooglePlayGames) 檢查中,並直接前往失敗邏輯 (如適用)。

12. 電腦最佳化

Google Play 遊戲與一般 Android 手機有幾項差異,因此您可能需要相應調整遊戲設定。

改用 DXT 進行紋理壓縮。如果無法直接傳遞至播放器的 GPU,系統會在執行階段解碼記憶體中的常見 Android 紋理格式 (例如 ETC)。ASTC 可提供最佳的電腦相容性,但您必須使用電腦 GPU 剖析工具,才能驗證遊戲的預期行為。

Unity

由於您現在使用的是桌上型電腦 GPU,因此可能也想提高圖像品質。你可以在「專案設定」的「畫質」下方直接調整

身分證件的

13. 恭喜

您已準備好一切,可以開始為 Google Play 遊戲開發遊戲。您可以開始測試及疊代遊戲。請注意,即使可以保留相同的程式碼集,您仍需調整遊戲,使其感覺像是原生電腦遊戲。

後續步驟

在 Google Play 遊戲上發布遊戲需要完成更多工作:

最後,您目前為支援 Google Play 遊戲所做的許多工作,也有助於在 ChromeOS 上發布遊戲,建議您一併支援該平台和電腦。