本文档将指导您设置 Unity 项目,以使用适用于 Unity 的 Google Play 游戏插件。您将了解如何安装该插件以及如何配置 Unity 项目。本文档还介绍了如何验证身份验证服务。
准备工作
查看软件要求。 设置 Play 管理中心并安装 Unity 编辑器。
安装 Unity 编辑器并 在 Unity 中构建游戏。
安装插件
如需下载并安装适用于 Unity 的 Google Play 游戏插件,请在 Unity 编辑器中按以下步骤操作:
下载 GitHub 代码库。
在
current-build目录下,找到unitypackage文件。此文件代表该插件。例如,它应类似于以下内容:current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
设置 Unity 项目
如需在玩家设置中设置 Unity 项目,请按以下步骤操作:
打开您的游戏项目。
在 Unity 编辑器中,依次点击 Assets > Import Package > Custom Package ,将
unitypackage文件导入到项目资源中。确保当前的 build 平台已设置为 Android 。
在主菜单中,依次点击 File > Build Settings 。
选择 Android ,然后点击 Switch Platform 。
Window > Google Play Games 下应该会显示新的菜单项。如果未显示,请点击 Assets > Refresh 来刷新资源,然后再次尝试设置 build 平台。
在 Unity 编辑器中,依次点击 File > Build Settings > Player Settings > Other Settings 。
在 目标 API 级别 框中,选择一个版本。
在 Scripting backend 框中,输入
IL2CPP。在 Target architectures 框中,选择一个值。
记下软件包名称 package_name。您稍后可以使用此信息 。
创建一个新密钥库
如要验证您的凭证,您需有一个密钥。 请按照以下步骤操作:
- 在 Unity 编辑器中,依次点击 File > Build settings > Player settings 。
- 在 Publishing settings 部分中,点击 Keystore manager 。
- 在 Keystore manager 窗口中,依次点击 Keystore > Create new > Anywhere 。
- 选择一个文件夹,并为密钥库命名。
- 在 Password 框中,输入密码并确认。
- 点击添加密钥 。
记下文件夹名称。您可以使用此名称来 创建凭据,以便在 Google Cloud 中使用。
从 Play 管理中心复制 Android 资源
您在 Play 管理中心内创建的每个成就、排行榜和活动都包含您在 设置 Unity 项目时使用的 Android 资源。
如需获取游戏的 Android 资源,请按以下步骤操作:
在 Google Play 管理中心内, 打开游戏。
在 Play 游戏服务 - 配置 页面(拓展用户 > Play 游戏服务 > 设置和 管理 > 配置 )中, 点击 获取资源 。
在 Resources 窗口中,点击 Android(XML) 标签页。
选择并复制 Android 资源 (
AndroidManifest.xml) 内容。
将 Android 资源添加到您的 Unity 项目
将以下 Android 资源添加到您的 Unity 项目:
在 Unity 编辑器中,依次点击窗口 > Google Play 游戏 > 设置 > Android 设置向导 。
- 在 Directory to save constants 字段中,输入常量文件的文件夹名称。
在 Constants class name 字段中,输入要创建的 C# 类的名称,包括命名空间。
例如,如果 C# 类是
id.cs,并且位于 Assets > myproject > scripts > id.cs 下, 则常量类名称可以是myproject.scripts.id。在资源定义 字段中,粘贴从 Google Play 管理中心复制的 Android 资源数据(
AndroidManifest.xml文件)。可选:在 Client ID 字段中,输入关联的 Web 应用的客户端 ID。
如需从 Google Cloud 获取游戏的客户端 ID,请参阅 创建客户端 ID。
只有在游戏具有基于网络的后端并且后端服务器需要用服务器授权代码来换取访问令牌时,或者您需要 ID 令牌来让玩家进行其他非游戏 API 调用时,才需要该 ID。
点击设置 。系统会使用客户端 ID 配置游戏,并生成一个 C# 类,其中包含每项 Android 资源的常量。
在 Unity 编辑器中,依次点击窗口 > Google Play 游戏 > 设置 > 附近连接设置 。
在附近连接服务 ID 字段中,输入 package_name。
请使用您在 设置 Unity 项目中使用的同一 package_name。
点击设置 。
选择社交平台
Google Play 游戏服务插件实现了 Unity's Social 接口, 以便与那些在与其他平台集成时就已使用该接口的游戏兼容 。但是,有些功能是 Play 游戏所独有的,并作为由 Unity 提供的标准 Social 接口的扩展提供。
您可以通过 Social.Active 对象(它是对 ISocialPlatform 接口的引用)访问标准 API 调用。您可以将 Social.Active 对象转换为 PlayGamesPlatform 类(其中提供其他方法),然后借此访问非标准 Google Play 游戏服务扩展。
使用插件而不替换默认社交平台
调用
PlayGamesPlatform.Activate时,
Google Play 游戏服务会成为您的默认社交平台实现。这意味着 Google Play 游戏服务插件将执行对 Social 和
Social.Active 中方法的静态调用,对于使用该插件的大多数游戏而言,这是预期行为。
不过,如果您出于某些原因而需要继续访问默认实现(例如,需要使用默认实现向其他社交平台提交成就和排行榜),可以使用 Google Play 游戏服务插件而不替换默认实现。为此,请执行以下操作:
- 调用
PlayGamesPlatform.Activate方法。 - 如果
Xyz是您在Social类中调用的方法的名称,请勿 调用Social.Xyz。请改为调用PlayGamesPlatform.Instance.Xyz。 - 与 Google Play 游戏服务互动时,请使用
PlayGamesPlatform.Instance属性,而不是Social.Active。
通过这种方式,您甚至可以将得分和成就同时提交到两个或多个社交平台:
// 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 游戏服务功能。
如果 Unity 插件版本低于 v11,您将无法使用身份验证功能。
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 authenticate. 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。因此,我们建议在调用回调之前让游戏保持在待机屏幕中,以确保用户在完成身份验证后才能开始玩游戏。
防止自动触发的玩家资料创建
您可以通过清单文件停用自动触发的玩家资料创建提示。这样,没有 Play 游戏服务玩家资料的用户便可以继续加载游戏,而不会收到创建 Play 游戏服务玩家资料的提示。 如需了解详情,请参阅玩家资料创建选项。
如需使用此功能,请确保满足以下条件:
- 设备上没有任何已登录 Google 账号具有 Play 游戏服务玩家资料。
- 您的游戏已与 Play 游戏服务
Unity 插件
2.1.0或更高版本集成。
在
AndroidManifest.xml文件中,将com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION标记添加到<meta-data>元素,并将属性添加到<application>元素:<application> ... <meta-data android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION" android:value="true" /> ... </application>
将此标志设置为 true 会告知 Play 游戏服务,您的游戏将处理玩家资料创建流程。因此,Play 游戏服务不会自动为设备上没有现有 Play 游戏服务玩家资料的用户显示玩家资料创建界面。
如需处理因缺少 Play 游戏服务玩家资料而导致用户未通过身份验证的情况,您可以使用 PlayGamesPlatform.Instance.IsAuthenticated()。此方法会返回
false,因为玩家资料创建失败。如需解决此问题,请调用PlayGamesPlatform.Instance.ManuallyAuthenticate()以启动玩家资料 创建流程。if (!PlayGamesPlatform.Instance.IsAuthenticated()) { // The user is unauthenticated, likely due to a missing Play Games profile. // Calling PlayGamesPlatform.Instance.ManuallyAuthenticate() will trigger // the profile creation UI. PlayGamesPlatform.Instance.ManuallyAuthenticate((SignInStatus status) => { // ... }); }添加抑制标记后,请使用
logcat窗口验证添加操作。logcat输出包含类似于以下内容的消息:“Game opted out of automatic profile creation prompt (using manifest)”(游戏选择停用自动玩家资料创建提示 [使用清单])。
使用 Play 应用签名功能
Google 会使用 Play 应用签名功能管理和保护应用的签名密钥。 您可以使用 Play 应用签名功能为经过优化的 Android App Bundle 文件分发版本签名。Play 应用签名功能会将您的应用签名密钥存储在 Google 的安全基础架构中。 如需使用 Play 应用签名功能,您必须先从 Unity 编辑器创建并下载 AAB 文件。然后,您可以将 AAB 文件上传到 Play 管理中心并创建内部测试版本。
创建 AAB 文件
如需在 Unity 编辑器中创建 AAB 文件,请按以下步骤操作:
- 在 Unity 编辑器中,依次点击 File > Build settings 。
选择 Build App Bundle ( Google Play ) 。
如需了解详情,请参阅 Android build 设置参考文档。
点击 Build 。
从 Unity 编辑器下载 AAB 文件。
创建内部测试版本
如需在 Play 管理中心内创建内部测试版本并添加测试人员,请执行以下步骤:
- 在 Google Play 管理中心内, 选择一款游戏。
- 前往测试和发布 页面 (测试 > 内部测试)。
- 点击上传 ,然后选择 AAB 文件。
- 在版本详细信息 字段中,输入名称。
- 点击下一步 ,然后查看版本详细信息。
- 点击保存并发布 。
在测试人员 标签页上,点击创建邮箱名单 ,以添加最多 100 名测试人员。
如需了解详情, 请参阅 内部测试:最多可接受 100 名测试人员。
在接收反馈的网址或电子邮件地址中,输入反馈网址或电子邮件 地址以提供反馈。
点击保存 。
验证应用签名凭据
- 在 Google Play 管理中心内, 选择一款游戏。
- 前往测试和发布 页面 (设置 > 应用签名)。
- 验证应用签名凭据。
构建并运行项目
此时,您可以构建并运行游戏项目。游戏启动后,您会看到自动身份验证尝试。
您需要一部已启用 USB 调试的 Android 设备,或者一个可以运行所开发项目的模拟器。
检索服务器身份验证代码
若要代表当前玩家在后端网络服务器上访问 Google API,您需要从客户端应用获取身份验证代码,然后将其传递给您的网络服务器应用。然后,可以使用该代码换取访问令牌,以便调用各种 API。如需了解该 工作流,请参阅 使用 Google 账号登录网站。
如需获取服务器端访问代码,请执行以下操作:
- 在 Play 管理中心内为游戏添加 Web 客户端 ID。
- 在 Google Play 管理中心内, 选择您的游戏。
- 在配置 页面(拓展用户 > Play 游戏服务 > 设置和管理 > 配置 )中,点击添加凭据 。
- 在添加凭据 页面中,选择游戏服务器 。
- 生成 OAuth 2.0 客户端 ID。
- 记下客户端 ID 值。您稍后需要提供此值。
将 Web 客户端 ID 添加到 Unity Hub。
- 在 Unity Hub 中,为 Unity 设置 Google Play 游戏并进行身份验证。
- 在 Unity Hub 中,依次前往 Window > Google Play 游戏 > Setup > Android 设置向导 。
- 输入客户端 ID 值。
检索其他范围的服务器授权代码。
C#
using GooglePlayGames.BasicApi; // Define selectedScope having additional identity scopes. private List
selectedScopes = new List (); // Add scopes you want to request. selectedScopes.Add(AuthScope.OPEN_ID); selectedScopes.Add(AuthScope.PROFILE); selectedScopes.Add(AuthScope.EMAIL); // Call RequestServerSideAccess with additional scopes and retrieve // authcode and grantedscopes list. PlayGamesPlatform.Instance.RequestServerSideAccess( /* forceRefreshToken= */ false,selectedScopes (AuthResponse authResponse) => { string authCode = authResponse.GetAuthCode(); List grantedScopes = authResponse.GetGrantedScopes(); // send authCode to server... });
设置和添加功能
启用 Play 游戏服务功能。
使用 Play 游戏服务 API 为游戏添加功能:
适用于 Unity 的 Recall API (仅适用于 Unity 插件版本 v11 及更高版本)