本主题介绍如何设置您的 Unity 项目以使用Google Play 游戏 Unity 插件。这些任务包括设置项目、选择社交平台以及设置玩家登录。
开始之前
在 Google Play Console 中,为您的游戏设置 Play Console。
在 Google Play Console 中,创建成就。
插件安装
使用以下选项之一获取插件
在
current-build
目录中找到unitypackage
文件。此文件是插件。例如,它应该类似于以下内容current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
在 Unity 中打开您的游戏项目。
通过单击资产 > 导入包 > 自定义包菜单项,将
unitypackage
文件导入到项目的资产中。确保当前构建平台设置为Android。
在主菜单中,单击文件 > 构建设置…。
选择Android并单击切换平台。
在窗口 > Google Play 游戏下应该有一个新的菜单项。如果没有,请通过单击资产 > 刷新刷新资产,然后尝试再次设置构建平台。
从 Play Console 获取 Android 资源
您在 Play Console 中创建的每个成就、排行榜和事件都包含一个 Android 资源,您在设置 Unity 项目时会使用它。
获取游戏的 Android 资源。
在 Play Console 中,打开游戏的 Play 游戏服务项目。
单击成就选项卡,然后单击获取资源。
在导出资源窗口中,单击Android选项卡。
选择并复制 XML 内容。
设置您的 Unity 项目
将 Android 资源添加到您的 Unity 项目中。
在 Unity 中,单击 **窗口 > Google Play 游戏 > 设置... > Android 设置**。
在设置窗口中完成以下项目
保存常量的目录:常量文件的文件夹。
常量类名:要创建的 C# 类的名称,包括命名空间。
资源定义:将 Play Console 中的 Android 资源数据粘贴到此处。
Web 客户端 ID:链接的 Web 应用的客户端 ID。仅当您的游戏有基于 Web 的后端并且需要服务器授权代码才能由后端服务器交换访问令牌,或者如果需要玩家的 ID 令牌以进行其他非游戏 API 调用时,才需要此 ID。
单击设置。这将使用客户端 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 安装。为此
- 将 JAVA_HOME 环境变量设置为您的 Java SDK 安装路径(例如,
C:\Program Files\Java\jdk1.7.0_45
)。 - 将 Java SDK 的
bin
文件夹添加到您的PATH
环境变量中(例如,C:\Program Files\Java\jdk1.7.0_45\bin
) - 重新启动。
如何编辑环境变量:在 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 游戏将成为您的默认社交平台实现,这意味着对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 游戏服务功能。
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 登录。
要获取服务器端访问代码
在 Play 游戏控制台中配置与您的游戏关联的 Web 应用程序的 Web 客户端 ID。
在玩家通过身份验证后,调用
PlayGamesPlatform.Instance.RequestServerSideAccess
以获取服务器端访问代码。将此代码传递到您的服务器应用程序。
PlayGamesPlatform.Instance.RequestServerSideAccess(
/* forceRefreshToken= */ false,
code -> {
// send code to server
});