開始使用 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」->建構設定,並檢查是否已準備好建構 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 隨附的版本可正常運作,但 ADB 搭配 Unity 隨附的 ADB 版本可能不適用。模擬器隨附相容版本,你可以在 C:\Program Files\Google\Play Games Developer Emulator\current\emulator 找到。為獲得最佳開發人員體驗,建議您安裝 Android Studio,並使用 Android Studio 管理 Android SDK。

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

adb connect localhost:6520

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

Unity 隨附的 ADB 版本可能與模擬器不相容。如要確認,請依序選取「File」->「」版本設定並查看執行裝置對話方塊,查看清單中是否列出該裝置。

執行裝置

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

透過以下兩個步驟直接部署至模擬器:

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

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

  1. 開啟 Android Studio,然後選取「Edit」->。偏好設定 ->外部工具:
  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」和「Custom Launcher Gradle Template」,可在 Assets\Plugins\Android\ 下產生 Gradle 檔案。

螢幕截圖的

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

5. 部署至 Chromebook (選用)

只要採用 ChromeOS 裝置,即使無法存取 Google Play 遊戲模擬器,即可開始開發適用於 Google Play 遊戲的遊戲。Chromebook 有鍵盤和滑鼠,提供大螢幕和 x86 設定,功能與 Google Play 遊戲電腦版類似。我們將在 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. 選取視窗 ->分析 ->Android Logcat 用於開啟 Android Logcat 視窗。

視窗 > 在 Unity 中開啟分析,

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

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

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

「Other Connections」(其他連線) 視窗已開啟。已輸入 IP 位址。

  1. 按一下「連結」,您應該會看到「Success」(成功) 視窗:

畫面上會出現一個對話方塊:

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

Unity

您現在可以在 Chromebook 上部署遊戲,並開始在類似電腦硬體上進行測試與開發。

6. 部署測試版本

Google Play 遊戲會要求您部署遊戲的 x86 版本,這也是為什麼遊戲在電腦上達到效能基準。Unity 的所有 LTS 變化版本都可以產生 x86 和 x86-64 相容的 Android 版本 (標示為「Chrome OS」),而 Unity 2018 以下版本則可產生 x86 版本。如要解鎖這些架構,您需要先切換至 IL2CPP 指令碼後端,這個頁面可能已經在實際工作環境中,支援 arm64 支援。

  1. 選取「File」->版本設定開啟「Build Settings」視窗,然後按一下「Player Settings」

螢幕截圖的

  1. 前往「Other Settings」部分,將 Scripting Backend 切換為 IL2CPP

螢幕截圖的

建議您一併啟用 x86 或 x86-64 支援功能。如要在 Google Play 遊戲平台上推出遊戲,只需支援 x86 即可,不過我們建議支援 x86-64。

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

Frame Pacing 程式庫 Unity 套件的版本也與 Google Play 遊戲不相容,因此會導致遊戲在啟動時異常終止。

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

螢幕截圖

您現在可以開始建構產品了!

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

Google Play 遊戲模擬器的螢幕截圖,

如果無法部署遊戲,請檢查「Google HPE 裝置 (localhost:6520)」是否相容顯示在「Run Device」中請參考閱讀清單,進一步瞭解 如何選擇 Kubeflow Pipelines SDK 或 TFX如果沒有,請確保 HPE_Dev 正在執行,並顯示 Android 主畫面。如果裝置仍未顯示在裝置清單中,請以目前使用的 adb.exe 執行 adb connect localhost:6520。如果您使用的是 Android Logcat Unity 外掛程式,請選取Tools ->開啟終端機,開啟終端機,開啟 Unity 目前使用的 adb.exe 目錄。

螢幕截圖的開啟終端機」醒目顯示」style="width: 624.00px"src="img/9101ce3c95fb1aa2.png"如果size="(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%。由於許多手機遊戲都採用「螢幕尺寸調整」功能,因此改成「常數實體大小」或「常數像素大小」可能是達成目標的第一步。

螢幕截圖的

此外,如果偵測到您正在 Google Play 遊戲中執行遊戲,您可能也需要在執行階段使用 QualitySettings.SetQualityLevel 指令動態設定品質設定。Google Play 遊戲模擬器使用 ANGLE 發出來自 OpenGL Unity 的原生 DirectX 或 Vulkan 指令,因此您的圖形保真度可能會比手機遊戲版本更高的圖像保真度。

8. 輸入處理

Google Play 遊戲的遊戲應該提供滑鼠和鍵盤輸入的運送方式。您必須使用滑鼠和鍵盤來規劃如何與遊戲互動,因此請花點時間取得 Input SDK 統一套件。如果在該頁面找不到下載項目,請確認您是使用 play-mp-libs 群組中帳戶登入。

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

根據預設,Google Play 遊戲和 ChromeOS 會將滑鼠輸入動作轉換成模擬觸控。如果您使用 Input.GetTouchInput.touchCount,遊戲會繼續正常運作。如果仰賴多點觸控輸入 (例如雙拇指控製或雙指撥動縮放),則必須將操作對應至按鍵。您也應該將遊戲內動作對應到按鍵動作,例如按下 i 鍵開啟目錄、Esc 鍵關閉對話方塊,以及 Enter 鍵傳送遊戲內訊息。

2D 平台微遊戲會使用箭頭移動,並使用空格鍵跳躍。如果您使用自己的遊戲,請確認已在下一個步驟中使用偏好的按鍵繫結。

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 平台微遊戲中,動作為 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. 電腦最佳化

與一般 Android 手機相比,Google Play 遊戲有些許差異,您可能需要據此設定遊戲。

切換至 DXT 進行紋理壓縮。如果 ETC 等常見的 Android 紋理格式無法直接傳遞至玩家的 GPU,就會在執行階段中解碼。ASTC 可提供最佳的電腦相容性,但您必須使用電腦版 GPU 剖析工具才能驗證遊戲的預期行為。

Unity

您目前使用的是電腦 GPU,因此建議您提高圖像品質。您可以直接在「專案設定」的「品質」底下調整這項設定。

螢幕截圖的

13. 恭喜

你已經準備好可以開始為 Google Play 遊戲打造自家遊戲了。您可以開始對遊戲進行測試及疊代。提醒您,雖然您可以使用相同的程式碼集,但會希望將遊戲調整成像原生電腦遊戲一樣。

後續步驟

您還需完成更多工作,才能在 Google Play 遊戲上架遊戲:

最後,您目前為支援 Google Play 遊戲所完成的工作,大多有助於建構使用 ChromeOS,您應考慮同時支援該平台和電腦。