Unity 和 Google Play 游戏电脑版使用入门

1. 简介

Google Play 游戏徽标

上次更新日期:2022 年 10 月 18 日

如何为 Google Play 游戏电脑版准备您的游戏?

Google Play Games 可助您轻松将移动游戏发布到 Windows PC 上。这意味着,您无需重新设计游戏或重新设计业务模式,即可提高玩家互动度和受众群体。为了尽可能为新 PC 玩家提供最佳体验,您仍需进行一些更改。

学习内容

此 Codelab 涵盖了要求核对清单的基本部分,以帮助您顺利上手您的游戏,并帮助您针对 Google Play 游戏电脑版准备您自己的 Unity 游戏。未涵盖更深入的集成,例如 Play 游戏登录和 Play Integrity API。

  • 如何通过 Unity 针对 x86 架构构建应用。
  • 如何测试并部署到 Google Play 游戏模拟器。
  • 如何修改界面,使其在 PC 上看起来很棒。
  • 如何检测您是否在 Google Play 游戏模拟器中运行,并相应地调整游戏。

所需条件

2. 进行设置

打开或创建新项目

  1. 使用 2D Platformer Microgame 创建一个新项目,或打开您自己的项目。

Unity

  1. 在项目中,选择 File ->Build Settings 中,并检查您是否已针对 Android 进行构建。

Unity 的屏幕截图

3. 准备 Google Play 游戏模拟器

首先下载模拟器

安装完成后,您应该会在窗口中看到一个 Android 桌面:

Google Play 游戏模拟器窗口的屏幕截图。Android 主屏幕可见。

这是一个功能齐全的高性能 Android 环境,适合用于游戏开发。它应作为设备显示在 Android 调试桥 (adb) 本地主机上:

❯ 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 版本可能与模拟器不兼容。选择文件 ->Build Settings,然后查看 Run Device 对话框,查看该对话框是否已列出。

在

根据您的项目、构建流程和舒适级别,您可以选择将 Unity 配置为直接部署到 Google Play 游戏模拟器,也可以构建 APK 并使用 adb install 手动部署。手动部署所需的更改最少,但可能会拖慢迭代周期。

请通过以下两个步骤直接部署到模拟器:

  1. 将 Unity 配置为使用其他 Unity SDK,最好是使用 Android Studio 安装的 SDK。
  2. 更新 Build Tools 版本以解决 Unity 中的 bug

由于 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 选项。

Android Studio 中

当您刷新连接的设备时,您应该会看到 Google HPE device (localhost:6520) 显示在 build 窗口中:

此 API 的屏幕截图

根据此错误的状态和您的 Unity 版本,您可能还需要更改您的构建工具版本。为此,请检查您是否在生成 mainTemplate.gradlelauncherTemplate.gradle

  1. 打开 Project Settings 窗口,找到 Player Settings,然后找到 Publishing Settings 部分。
  2. 向下滚动到 Build 选项,然后勾选“Custom Main Gradle Template”和“Custom Launcher Gradle Template”(自定义启动器 Gradle 模板),这会在 Assets\Plugins\Android\ 下生成这两个 Gradle 文件。

此 API 的屏幕截图

  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

软件包管理器窗口,其中包含

此外,您还需要针对 Android 开发配置您的 Chromebook。首先启用 Linux。

  1. 选择 设置 ->开发者 ->Linux。

展示如何启用 Linux 支持的动画图片。已在“设置”窗口中选择开发者。然后

然后启用 ADB 调试。

  1. 选择设置 ->开发者 ->Linux 开发环境 ->开发 Android 应用 ->启用 ADB 调试

“开发者”菜单中已启用 ADB 调试。

此外,您还需要获取 Chromebook 的 IP 地址。最简单的方法是

  1. 点击网络信息图标,即可获取 Chromebook 的 IP 地址。

Chromebook 上打开的网络窗口的屏幕截图。

点击网络信息按钮,其中显示了 IP 地址。

  1. 选择窗口 ->分析 ->Android Logcat 打开 Android Logcat 窗口。

使用以下命令在 Unity 中打开“Window>Analysis”

  1. 打开设备列表。如果当前未连接任何设备,它可能会读取 No Device

已显示 Android Logcat 窗口,已选择设备下拉菜单。

  1. 点击其他连接选项,然后输入 Chromebook 的 IP 地址。

系统会打开“Other Connections”窗口。已输入 IP 地址。

  1. 点击连接。您应该会看到 Success 窗口:

一个对话框,上面写着

您的 Chromebook 现在会显示在 Unity 的“Run Device”(运行设备)列表中(您可能需要先刷新屏幕):

Unity

现在,您可以将游戏部署到 Chromebook,并开始在类似 PC 的硬件上进行测试和开发。

6. 部署测试 build

Google Play 游戏要求您部署游戏的 x86 版本,这是游戏在台式机上达到性能基准的原因之一。Unity 的所有 LTS 变体都可以生成与 x86 和 x86-64 兼容的 Android build(标记为“Chrome 操作系统”),Unity 2018 及更早版本可以生成 x86 build。要解锁这些架构,您首先需要切换至 IL2CPP 脚本后端,您可能已在生产环境中为 arm64 提供支持。

  1. 选择文件 ->Build Settings 打开“Build Settings”窗口,然后点击 Player Settings

此 API 的屏幕截图

  1. 转到 Other Settings 部分,将 Scripting Backend 切换到 IL2CPP

此 API 的屏幕截图

您还应启用 x86 或 x86-64 支持。若要在 Google Play 游戏平台上分发,您只需要支持 x86,但我们建议您使用 x86-64。

“播放器设置”中“配置”部分的屏幕截图

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 device (localhost:6520)”显示在“Run Device”(运行设备)中列表。如果未显示 HPE_Dev,请确保 HPE_Dev 正在运行,并且您可以看到 Android 主屏幕。如果它仍未出现在您的设备列表中,请以您所使用的 adb.exe 确切值运行 adb connect localhost:6520。如果您使用 Android Logcat Unity 插件,请依次选择 Tools ->打开终端,打开一个终端指向 Unity 正在使用的 adb.exe 所在的目录。

此 API 的屏幕截图打开终端”突出显示”style="width: 624.00px"src="img/9101ce3c95fb1aa2.png"48w, img/9101ce3c95fb1aaa2_72.png大小=宽度: 840px) - 100vw, 856px">

7. 针对 PC 调整游戏

尽可能根据平台无关指标或特定功能的存在情况对游戏做出任何更改。例如,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 手机相比,PC 的显示屏更大。建议尽可能将平视显示 (HUD) 占用的屏幕空间超过 20%。由于许多移动游戏都使用“根据屏幕尺寸进行缩放”,因此请将其更改为“固定的物理尺寸”或“固定像素尺寸”可能是朝着实现这一目标迈出的第一步。

此 API 的屏幕截图

如果您检测到自己正在 Google Play 游戏中运行,则可能还需要在运行时使用 QualitySettings.SetQualityLevel 命令动态设置质量设置。Google Play 游戏模拟器使用 ANGLE 从 OpenGL Unity 发出的原生 DirectX 或 Vulkan 命令,因此您可以实现比移动游戏 build 更高的图形保真度。

8. 输入处理

Google Play 游戏中提供的游戏应围绕鼠标和键盘输入而构建。您需要规划如何使用鼠标和键盘与游戏互动,因此请花点时间获取输入 SDK unitypackage。如果您在该页面上没有看到下载内容,请确保您已使用 play-mp-libs 群组中的账号登录。

出于测试目的,许多游戏都会在编辑器中构建基本的鼠标和键盘控件,以用于开发目的。如果您在 ChromeOS 设备或 Google Play 游戏模拟器上运行应用,建议您尽可能启用这些功能。

默认情况下,Google Play 游戏和 ChromeOS 会将鼠标输入转换为模拟触摸操作。如果您使用 Input.GetTouchInput.touchCount,您的游戏会继续按预期运行。如果您依赖于多点触控输入,例如双拇指控件或双指张合进行缩放,则需要将操作映射到按键操作。您还应将游戏内操作映射到按键操作,例如按 i 打开库存,按 Esc 关闭对话框,按 Enter 发送游戏内消息。

2D 平台游戏微型游戏使用箭头移动,使用空间进行跳跃。如果您使用的是自己的游戏,请确保您为下一步设置了首选按键组合。

9. 输入 SDK 集成

现在,您已设置鼠标和键盘控件,接下来需要添加输入 SDK 支持。此功能可通过一个便捷的弹出式窗口帮助玩家发现您的 PC 输入:

  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 平台微型游戏,操作为向左、向右和跳跃:
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 语句修改为以下内容:
return new InputMap
{
    InputGroups = new List<InputGroup> { movementInputGroup },
    MouseSettings = new MouseSettings
    {
        InvertMouseMovement = false,
        AllowMouseSensitivityAdjustment = false
    }
};
  1. 最后,将您创建的脚本添加到游戏中:

名称为“ ”的节点的屏幕截图

  1. 再次部署游戏时,按 Shift+Tab 打开游戏内叠加层。

此 API 的屏幕截图

  1. 点击控件,查看您已配置的控件。

此 API 的屏幕截图

10. 移除嵌入式 Web 视图

为了让玩家获得良好的体验,您应移除嵌入的网页视图。通常使用嵌入式网页视图来显示隐私权政策或服务条款等内容。虽然它们适用于 Google Play 游戏,但它们显示在嵌入式“移动设备”上,而不是玩家首选的桌面浏览器,也可能会导致 PC 玩家感到困惑。因此,在 Unity 中,如果您使用任何扩展程序来显示嵌入式浏览器,请回退到 Application.OpenURL(url)

11. 权限和功能

Google Play 游戏不支持许多 Android 功能和权限。一般经验法则是,您的 PC build 绝不应弹出权限对话框。现在您的 build 已准备就绪,不妨完成典型的新安装操作,并写下您看到的要添加到“待办事项”的所有对话框用于提交游戏的列表

某些 Unity 游戏使用 Android.Permission API 请求权限。您应将这些检查封装在 if (GoogleDeviceUtilities.IsGooglePlayGames) 检查中,并直接转到失败逻辑(如果适用)。

12. 桌面优化

与典型 Android 手机相比,Google Play 游戏有一些差异,您可能需要相应地配置游戏。

切换到 DXT 以进行纹理压缩。如果 ETC 等常见 Android 纹理格式无法直接传递到播放器的 GPU,则会在运行时在内存中解码。ASTC 可为您提供最佳的桌面兼容性,但您需要使用桌面 GPU 分析工具来验证游戏的预期行为。

Unity

由于您当前是在桌面 GPU 上运行,因此您可能还需要提高图形质量。您可以直接在 Project Settings 中的 Quality 下进行调整

此 API 的屏幕截图

13. 恭喜

您已做好一切准备,可以开始在 Google Play 游戏中开发游戏了。您可以开始对游戏进行测试和迭代。请注意,即使您可以保留相同的代码库,您也需要调整游戏,使其感觉就像原生 PC 游戏一样。

后续操作

您还需要完成以下工作,才能在 Google Play 游戏平台上发布游戏:

最后,您在支持 Google Play 游戏方面所做的大部分工作也有助于您在 ChromeOS 上运行,因此您应该考虑在 PC 的基础上支持该平台。