适用于 Unity 的 Google Play 游戏插件使用入门

本主题介绍了如何设置 Unity 项目,以使用适用于 Unity 的 Google Play 游戏插件。这些任务包括设置项目、选择社交平台,以及设置玩家登录

准备工作

安装插件

  1. 使用以下任一方式获取插件:

  2. current-build 目录中找到 unitypackage 文件。此文件即是插件。例如,文件名应与以下内容类似:

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    
  3. 在 Unity 中打开游戏项目。

  4. 依次点击 Assets > Import Package > Custom Package 菜单项,将 unitypackage 文件导入到项目资源中。

  5. 确保当前的 build 平台已设置为 Android

    1. 在主菜单中,依次点击 File > Build Settings...

    2. 选择 Android,然后点击 Switch Platform

    3. Window > Google Play Games 下应该会显示新的菜单项。如果未显示,请点击 Assets > Refresh 来刷新资源,然后再次尝试设置 build 平台。

通过 Play 管理中心获取 Android 资源

您在 Play 管理中心内创建的每个成就、排行榜和活动都包含您在设置 Unity 项目时使用的 Android 资源。

  1. 获取游戏所用的 Android 资源。

    1. 在 Play 管理中心内,打开游戏的 Play 游戏服务项目。

    2. 点击成就标签页,然后点击获取资源

    3. Export resources 窗口中,点击 Android 标签页。

    4. 选择并复制 XML 内容。

设置 Unity 项目

  1. 将 Android 资源添加到 Unity 项目。

    1. 在 Unity 中,依次点击 **Window > Google Play Games > Setup... > Android Setup**。

    2. 在设置窗口中完成以下项目:

    3. Directory to save constants:常量文件的文件夹。

    4. Constants class name:要创建的 C# 类的名称,包括命名空间。

    5. Resources Definition:从 Play 管理中心复制 Android 资源数据,然后粘贴到此处。

    6. Web client ID:关联的 Web 应用的客户端 ID。只有在游戏具有基于网络的后端并且后端服务器需要用服务器授权代码来换取访问令牌时,或者您需要 ID 令牌来让玩家进行其他非游戏 API 调用时,才需要该 ID。

    7. 点击 Setup。系统会使用客户端 ID 配置游戏,并生成一个 C# 类,其中包含每项 Android 资源的常量。

Android 设置

在 Unity 中设置 Android SDK 安装路径。此设置位于“Preferences”菜单的 External Tools 部分下。

若要将您的 Unity 游戏配置为使用 Android 版 Google Play 游戏运行,请先打开 Android SDK 管理器,验证您是否已下载以下软件包。组件的名称可能会有所不同,具体取决于您使用的是 Android Studio 中的 SDK 管理器,还是独立 SDK 管理器。- Google Play 服务 - Android 支持库 - 支持库的本地 Maven 制品库(也称为 Android 支持代码库) - Google 代码库 - Android 6.0 (API 23)(不会影响最低 SDK 版本)。

接下来,配置游戏的软件包名称。为此,请依次点击 File > Build Settings,选择 Android 平台,然后点击 Player Settings,以显示 Unity 的“Player Settings”窗口。在该窗口中,找到 Other Settings 下的 Bundle Identifier 设置。在此处输入您的软件包名称(例如“com.example.my.awesome.game”)。

若要登录 Play 游戏服务,您需要确保使用正确的证书为 APK 文件签名,也就是与您在设置期间在 Play 管理中心内输入的 SHA1 证书指纹对应的证书。

接下来,依次点击 Window | Google Play Games | Setup - Android setup 菜单项。此时会显示 Android 设置屏幕。

输入常量类名称。这是将更新(或创建)的完全限定类的名称,其中包含游戏资源 ID。名称格式为 <namespace>.<classname>。例如 AwesomeGame.GPGSIds

粘贴资源定义数据。这是来自 Google Play 管理中心的 XML 数据,其中包含资源 ID 以及 Android 的应用 ID。

在 Google Play 管理中心内的任何资源页面(例如“成就”或“排行榜”)上点击“获取资源”,然后点击“Android”,即可获取这些数据。

将数据粘贴到文本区域后,点击 Setup 按钮。

注意:如果您的游戏使用 Web 应用或后端服务器,您可以将 Web 应用与游戏相关联,以便获取玩家的 ID 令牌和/或电子邮件地址。为此,请在 Google Play 管理中心内将 Web 应用与游戏相关联,然后在设置对话框中输入 Web 应用的客户端 ID。

有关在 Windows 上针对 Android 构建项目的其他说明

如果您使用的是 Windows,则必须确保 Unity 可访问您安装的 Java SDK。具体方法如下:

  1. 将 JAVA_HOME 环境变量设置为 Java SDK 安装路径(例如 C:\Program Files\Java\jdk1.7.0_45)。
  2. 将 Java SDK 的 bin 文件夹添加到 PATH 环境变量中(例如 C:\Program Files\Java\jdk1.7.0_45\bin
  3. 重新启动。

如何修改环境变量:在 Windows 2000/XP/Vista/7 中,右键点击我的电脑,选择属性,接着进入高级系统属性(或进入系统属性并点击高级标签页),然后点击环境变量)。在 Windows 8 上,按 Windows 键 + W 键,然后搜索环境变量。如需了解详情,请参阅您所用 Windows 版本的文档。

运行项目

如果您使用的是冒烟测试示例,此时应该能够构建并运行项目。冒烟测试启动时,您会看到自动登录尝试。

若要在 Android 平台上构建并运行项目,请依次点击 File > Build Settings,选择 Android 平台,然后选择 Switch to Platform,点击 Build and Run

选择社交平台

Google Play 游戏插件实现了 Unity 的 Social 接口,以便与那些在与其他平台集成时就已使用该接口的游戏兼容。但是,有些功能是 Play 游戏所独有的,并作为由 Unity 提供的标准 Social 接口的扩展提供。

您可以通过 Social.Active 对象(它是对 ISocialPlatform 接口的引用)访问标准 API 调用。您可以将 Social.Active 对象转换为 PlayGamesPlatform 类(其中提供其他方法),然后借此访问非标准 Google Play 游戏扩展。

使用插件而不替换默认社交平台

调用 PlayGamesPlatform.Activate 时,Google Play 游戏会成为您的默认社交平台实现,这意味着 Google Play 游戏插件将执行对 SocialSocial.Active 中方法的静态调用。对于使用该插件的大多数游戏而言,这是预期行为。

不过,如果您出于某些原因而需要继续访问默认实现(例如,需要使用默认实现向其他社交平台提交成就和排行榜),可以使用 Google Play 游戏插件而不替换默认实现。具体方法如下:

  1. 不要调用 PlayGamesPlatform.Activate
  2. 如果您要对 Social 类调用的方法名为 Xyz,不要调用 Social.Xyz,而是改为调用 PlayGamesPlatform.Instance.Xyz
  3. 不要在与 Google Play 游戏互动时使用 Social.Active,而是改用 PlayGamesPlatform.Instance

通过这种方式,您甚至可以将得分和成就同时提交到两个或多个社交平台:

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

验证登录服务

当您的游戏打开时,系统会自动尝试使用登录服务建立与 Play 游戏服务的连接。如果连接成功,您的游戏会显示登录提示,并已准备好使用适用于 Unity 的 Google Play 游戏插件。

如果用户从未在此设备上使用过 Google Play 游戏,系统会自动引导他们完成一次性设置屏幕,以创建 Play 游戏账号。

在脚本的 Start 方法中,监听自动登录尝试的结果、获取身份验证状态,并在用户未登录的情况下停用 Play 游戏服务功能。

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to sign-in. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }
}

结果代码是一个枚举,可帮助您确定登录失败的原因。

如果您更喜欢使用 Unity 的 Social 平台,您也可以改用以下代码:

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

在从 Authenticate 获取成功的返回值之前,您无法调用任何 Google Play 游戏 API。因此,我们建议在调用回调之前让游戏保持在待机屏幕中,以确保用户在完成身份验证后才能开始玩游戏。

检索服务器身份验证代码

若要代表当前玩家在后端网络服务器上访问 Google API,您需要从客户端应用获取身份验证代码,然后将其传递给您的网络服务器应用。然后,可以使用该代码换取访问令牌,以便调用各种 API。如需了解该工作流,请参阅适用于网站的 Google 登录

如需获取服务器端访问代码,请执行以下操作:

  1. 在 Play 游戏管理中心内为游戏所关联的 Web 应用配置 Web 客户端 ID。

  2. 玩家通过身份验证后,调用 PlayGamesPlatform.Instance.RequestServerSideAccess 以获取服务器端访问代码。

  3. 将此代码传递给您的服务器应用。

  PlayGamesPlatform.Instance.RequestServerSideAccess(
    /* forceRefreshToken= */ false,
    code -> {
      // send code to server
    });

设置和添加功能