本文档指导您完成设置 Unity 项目以使用 Unity 的 Google Play 游戏插件的过程。您将学习如何安装插件并配置 Unity 项目。文档还介绍了如何验证登录服务。
开始之前
查看软件要求。设置 Play Console 并安装 Unity Hub。
设置 Play Console 以用于您的游戏。
安装 Unity Hub 并在 Unity 中构建您的游戏。
插件安装
要在 Unity Hub 中下载并安装 Unity 的 Google Play 游戏插件,请按照以下步骤操作
下载GitHub 仓库。
在
current-build
目录中,找到unitypackage
文件。此文件代表插件。例如,它应类似于以下内容current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
设置 Unity 项目
要在播放器设置中设置 Unity 项目,请按照以下步骤操作
打开您的游戏项目。
在 Unity Hub 中,单击**资源>导入包>自定义包**,将
unitypackage
文件导入到项目的资源中。确保当前构建平台设置为**Android**。
在主菜单中,单击**文件>构建设置**。
选择**Android**并单击**切换平台**。
在**窗口>Google Play 游戏**下应该有一个新的菜单项。如果没有,请单击**资源>刷新**刷新资源,然后重试设置构建平台。
在 Unity Hub 中,单击**文件>构建设置>播放器设置>其他设置**。
在**目标 API 级别**框中,选择一个版本。
在**脚本后端**框中,输入
IL2CPP
。在**目标架构**框中,选择一个值。
记下包名package_name。稍后您可以使用此信息。
创建一个新的密钥库
要验证您的凭据,您需要一个密钥。请按照以下步骤操作
- 在 Unity Hub 中,单击**文件>构建设置>播放器设置**。
- 在**发布设置**部分,单击**密钥库管理器**。
- 在**密钥库管理器**窗口中,单击**密钥库>创建新>任意位置**。
- 选择一个文件夹并为密钥库提供一个名称。
- 在**密码**框中,输入密码并确认。
- 单击**添加密钥**。
记下文件夹名称。您可以使用此名称在 Google Cloud 中创建凭据。
从 Play Console 复制 Android 资源
您在 Play Console 中创建的每个成就、排行榜和事件都包含一个 Android 资源,您在设置 Unity 项目时会用到它。
要获取游戏的 Android 资源,请按照以下步骤操作
在Google Play Console中,打开游戏。
在**Play 游戏服务 - 配置**页面(**增长> Play 游戏服务>设置和管理>配置**)中,单击**获取资源**。
在**资源**窗口中,单击**Android(XML)**选项卡。
选择并复制 Android 资源(
AndroidManifest.xml
)内容。
将 Android 资源添加到您的 Unity 项目
将以下 Android 资源添加到您的 Unity 项目
在 Unity Hub 中,单击**窗口>Google Play 游戏>设置>Android 设置**。
- 在**保存常量文件的目录**字段中,输入常量文件的文件夹名称。
在**常量类名**字段中,输入要创建的 C# 类名,包括命名空间。
例如,如果 C# 类是
id.cs
并且位于**资源>我的项目>脚本>id.cs**下。常量类名可以是myproject.scripts.id
。在**资源定义**字段中,粘贴您从 Google Play Console 复制的 Android 资源数据(
AndroidManifest.xml
文件)。可选:在**客户端 ID**字段中,输入关联的网络应用的客户端 ID。
要从 Google Cloud 获取游戏的客户端 ID,请参阅创建客户端 ID。
这仅在您的游戏具有基于网络的后端并且需要服务器授权代码来交换后端服务器的访问令牌,或者您需要玩家的 ID 令牌来进行其他非游戏 API 调用时才需要。
单击**设置**。这将使用客户端 ID 配置您的游戏,并生成一个包含每个 Android 资源常量的 C# 类。
在 Unity Hub 中,单击**窗口>Google Play 游戏>设置>附近连接设置**。
在**附近连接服务 ID**字段中,输入package_name。
使用与设置 Unity 项目中使用的相同的package_name。
单击**设置**。
选择一个社交平台
Google Play 游戏服务插件实现了 Unity 的社交界面,以便与在与其他平台集成时已使用该界面的游戏兼容。但是,某些功能是 Play 游戏独有的,并作为对 Unity 提供的标准社交界面的扩展提供。
标准 API 调用可以通过**Social.Active**对象访问,该对象是**ISocialPlatform**接口的引用。非标准 Google Play 游戏服务扩展可以通过将**Social.Active**对象强制转换为**PlayGamesPlatform**类来访问,其中提供了其他方法。
在不覆盖默认社交平台的情况下使用插件
当您调用PlayGamesPlatform.Activate
时,Google Play 游戏服务将成为您的默认社交平台实现,这意味着对Social
和Social.Active
中方法的静态调用将由 Google Play 游戏服务插件执行。这是大多数使用该插件的游戏的行为。
但是,如果由于某种原因您想保留默认实现的可访问性(例如,将其用于向不同的社交平台提交成就和排行榜),则可以在不覆盖默认实现的情况下使用 Google Play 游戏服务插件。为此
- 不要调用
PlayGamesPlatform.Activate
- 如果
Xyz
是你需要在Social
类中调用的方法的名称,请不要调用Social.Xyz
。 请改用PlayGamesPlatform.Instance.Xyz
- 与 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 游戏服务功能。
如果 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 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 调用。因此,我们建议游戏显示一个待机屏幕,直到回调被调用,以确保用户在身份验证完成之前无法开始游戏。
使用 Play 应用签名
Google 使用 Play 应用签名管理和保护你的应用签名密钥。你可以使用 Play 应用签名来签署优化的Android APP Bundle(AAB) 文件的分发版。Play 应用签名将你的应用签名密钥存储在 Google 的安全基础设施中。要使用 Play 应用签名,你必须首先从 Unity Hub 创建和下载 AAB 文件。然后,你可以将 AAB 文件上传到 Play 管理中心并创建内部测试版本。
创建 AAB 文件
要在 Unity Hub 中创建 AAB 文件,请按照以下步骤操作
- 在 Unity Hub 中,点击文件 > 构建设置。
选择构建应用包 (Google Play)。
有关更多信息,请参阅Android 构建设置参考。
点击构建。
从 Unity Hub 下载 AAB 文件。
创建内部测试版本
要在 Play 管理中心创建内部测试版本并添加测试人员,请执行以下步骤
- 在Google Play 管理中心中,选择一个游戏。
- 导航到测试和发布页面 (测试 > 内部测试)。
- 点击上传并选择 AAB 文件。
- 在发布详情字段中,输入名称。
- 点击下一步并查看发布详情。
- 点击保存并发布。
在测试人员选项卡上,点击创建电子邮件列表以添加最多 100 个测试人员。
有关更多信息,请参阅内部测试:管理最多 100 个测试人员。
在反馈 URL 或电子邮件地址中,输入反馈 URL 或电子邮件地址以提供反馈。
点击保存。
验证你的应用签名凭据
- 在Google Play 管理中心中,选择一个游戏。
- 导航到测试和发布页面 (设置 > 应用签名)。
- 验证你的应用签名凭据。
构建并运行项目
此时你可以构建并运行游戏项目。游戏启动时,你将看到自动登录尝试。
你需要一台启用了 USB 调试的物理 Android 设备或可以运行已开发项目的模拟器。
检索服务器身份验证代码
为了代表当前玩家访问后端 Web 服务器上的 Google API,你需要从客户端应用程序获取身份验证代码并将其传递给你的 Web 服务器应用程序。然后可以使用该代码交换访问令牌以调用各种 API。有关工作流程的信息,请参阅使用 Google 登录网络。
获取服务器端访问代码
在 Play 管理中心配置与你的游戏关联的 Web 应用程序的 Web 客户端 ID。
玩家经过身份验证后,调用
PlayGamesPlatform.Instance.RequestServerSideAccess
以获取服务器端访问代码。将此代码传递给你的服务器应用程序。
PlayGamesPlatform.Instance.RequestServerSideAccess(
/* forceRefreshToken= */ false,
code -> {
// send code to server
});
设置并添加功能
启用 Play 游戏服务功能。
使用 Play 游戏服务 API 向你的游戏添加功能
适用于 Unity 的 Recall API(仅支持 Unity 插件版本 v11 及更高版本)