开始使用 Google Play 游戏 Unity 插件

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

开始之前

插件安装

  1. 使用以下选项之一获取插件

  2. current-build目录中找到unitypackage文件。此文件是插件。例如,它应该类似于以下内容

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

  4. 通过单击资产 > 导入包 > 自定义包菜单项,将unitypackage文件导入到项目的资产中。

  5. 确保当前构建平台设置为Android

    1. 在主菜单中,单击文件 > 构建设置…

    2. 选择Android并单击切换平台

    3. 窗口 > Google Play 游戏下应该有一个新的菜单项。如果没有,请通过单击资产 > 刷新刷新资产,然后尝试再次设置构建平台。

从 Play Console 获取 Android 资源

您在 Play Console 中创建的每个成就、排行榜和事件都包含一个 Android 资源,您在设置 Unity 项目时会使用它。

  1. 获取游戏的 Android 资源。

    1. 在 Play Console 中,打开游戏的 Play 游戏服务项目。

    2. 单击成就选项卡,然后单击获取资源

    3. 导出资源窗口中,单击Android选项卡。

    4. 选择并复制 XML 内容。

设置您的 Unity 项目

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

    1. 在 Unity 中,单击 **窗口 > Google Play 游戏 > 设置... > Android 设置**。

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

    3. 保存常量的目录:常量文件的文件夹。

    4. 常量类名:要创建的 C# 类的名称,包括命名空间。

    5. 资源定义:将 Play Console 中的 Android 资源数据粘贴到此处。

    6. Web 客户端 ID:链接的 Web 应用的客户端 ID。仅当您的游戏有基于 Web 的后端并且需要服务器授权代码才能由后端服务器交换访问令牌,或者如果需要玩家的 ID 令牌以进行其他非游戏 API 调用时,才需要此 ID。

    7. 单击设置。这将使用客户端 ID 配置您的游戏,并生成一个包含每个 Android 资源常量的 C# 类。

Android 设置

在 Unity 中设置 Android SDK 安装路径。它位于首选项菜单的外部工具部分。

要配置您的 Unity 游戏以在 Android 上运行 Google Play 游戏,首先打开 Android SDK 管理器并验证您是否已下载以下软件包。根据您是使用 Android Studio 中的 SDK 管理器还是使用独立的 SDK 管理器,组件的名称可能不同。- Google Play 服务- Android 支持库- 支持库的本地 Maven 存储库(也称为 Android 支持存储库)- Google 存储库- Android 6.0 (API 23)(这不会影响最小 SDK 版本)。

接下来,配置游戏的包名称。为此,请单击文件 > 构建设置,选择Android平台并单击播放器设置以显示 Unity 的播放器设置窗口。在该窗口中,查找其他设置下的捆绑包标识符设置。在其中输入您的包名称(例如com.example.my.awesome.game)。

为了登录 Play 游戏服务,您需要对 APK 文件进行签名,确保使用正确的证书进行签名,即在设置过程中在开发者控制台中输入的 SHA1 证书指纹对应的证书。

接下来,单击窗口 |Google Play 游戏|设置 - Android 设置菜单项。这将显示 Android 设置屏幕。

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

粘贴资源定义数据。这是来自 Google Play 开发者控制台的 XML 数据,其中包含资源 ID 以及 Android 的应用程序 ID。

此数据可在 Google Play 开发者控制台中找到,方法是单击任何资源页面(例如成就或排行榜)上的“获取资源”,然后单击 Android。

将数据粘贴到文本区域后,单击设置按钮。

注意:如果您在游戏中使用 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 版本的文档。

运行项目

如果您使用的是Smoketest示例,则此时您应该能够构建和运行项目。当Smoketest启动时,您将看到自动登录尝试。

要在 Android 上构建和运行,请点击文件 > 构建设置,选择Android平台,然后切换到平台,最后构建并运行

选择一个社交平台

Google Play 游戏插件实现了 Unity 的社交界面,以便与已经在与其他平台集成时使用该界面的游戏兼容。但是,某些功能是 Play 游戏独有的,并作为 Unity 提供的标准社交界面的扩展提供。

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

在不覆盖默认社交平台的情况下使用插件

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

但是,如果由于某种原因您希望保留默认实现的可访问性(例如,使用它将成就和排行榜提交到不同的社交平台),则可以在不覆盖默认实现的情况下使用 Google Play 游戏插件。为此

  1. 不要调用PlayGamesPlatform.Activate
  2. 如果Xyz是要在Social类上调用的方法的名称,请不要调用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 调用。因此,我们建议游戏显示一个待机屏幕,直到回调被调用,以确保用户在身份验证完成之前无法开始玩游戏。

检索服务器身份验证代码

为了代表当前玩家在后端 Web 服务器上访问 Google API,您需要从客户端应用程序获取身份验证代码并将其传递到您的 Web 服务器应用程序。然后,可以使用该代码交换访问令牌以对各种 API 进行调用。有关工作流程的信息,请参阅网站的 Google 登录

要获取服务器端访问代码

  1. 在 Play 游戏控制台中配置与您的游戏关联的 Web 应用程序的 Web 客户端 ID。

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

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

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

设置并添加功能