Azure PlayFab 上的 Unity 第 6 部分:轻松制作排行榜





5.00/5 (1投票)
本文将演示如何利用 PlayFab Unity SDK 的内置功能,将排行榜添加到我们的游戏中。
在本文中,我们将学习为我们的 Unity 游戏项目配置排行榜,并将统计数据报告给 PlayFab 服务器,使其成为排行榜的一部分。
在这里,我们将为我们目前的 Unity 游戏项目添加排行榜功能,只需几个简单的代码片段,无需服务器配置或维护。
欢迎来到本 PlayFab 与 Unity 系列的最后一篇!我们将通过为来自上一篇文章的代码设置排行榜来结束这个项目。
要求
遵循本指南需要一个PlayFab 帐户和以下软件
- Unity 游戏引擎
- Microsoft Visual Studio
- 来自上一篇文章的 Unity游戏项目
任务简报
使用玩家统计数据构建排行榜可能具有挑战性。我们要确保数据快速且全局可用、可更新且可查询。幸运的是,PlayFab 处理了最困难的部分:我们只需使用他们的 API 即可!在本系列的最后一部分中,我们将创建一个排行榜,用于记录每个玩家在不同游戏会话中摧毁的机器人数量。
创建排行榜
我们首先打开 PlayFab 仪表板,导航到参与 > 排行榜,然后单击新建排行榜。
我们设置统计属性以创建一个总和排行榜,该排行榜跟踪被摧毁的机器人数量。统计数据 名称必须与玩家统计数据中设置的名称匹配。
在本教程中,我们需要在仪表板中再做一件事。多人游戏通常从服务器更新这些统计数据,因为它能够验证某些游戏条件并减轻玩家使用网络作弊的行为。但是,为了简单起见,我们希望直接从游戏客户端推送机器人摧毁计数,因为对于此项目来说,操纵统计数据并不是一个大问题。
我们选择齿轮图标以打开标题设置页面,然后单击 API 功能选项卡。然后,我们启用允许客户端发布玩家统计信息选项,然后单击保存。
从客户端报告统计信息
接下来,我们需要更新客户端代码以将机器人摧毁统计信息报告给 PlayFab。
我们打开 Client.cs 脚本并添加一个新的 using
语句
using PlayFab.ClientModels;
我们将这三个方法添加到类中,以将事件报告给服务器。我们需要确保 StatisticName
与创建排行榜时设置的名称匹配。它应该是类似“Bots Destroyed”的东西。
private void ReportStatBotDestroyed()
{
UpdatePlayerStatisticsRequest requestData = new UpdatePlayerStatisticsRequest() {
Statistics = new List<StatisticUpdate>() {
new StatisticUpdate() { StatisticName = "Bots Destroyed", Value = 1 }
}
};
PlayFabClientAPI.UpdatePlayerStatistics( requestData, OnReportStatBotDestroyedResult, OnReportStatBotDestroyedError );
}
private void OnReportStatBotDestroyedResult( UpdatePlayerStatisticsResult response )
{
// Successfully Reported
}
private void OnReportStatBotDestroyedError( PlayFabError error )
{
Debug.Log( error.ErrorMessage );
}
然后在 Update
循环中,我们在 GameObjects
更新本地游戏状态的位置调用 ReportStatBotDestroyed
,如下所示
// Update the status with local game state
for( var i = 0; i < enemies.Length; i++ )
{
if( enemyStatus[ i ] > 0 &&
( enemies[ i ] == null || !enemies[ i ].activeSelf ) )
{
enemyStatus[ i ] = 0;
ReportStatBotDestroyed();
}
}
这就是我们将玩家添加到排行榜上所需的一切!但是,当我们打开仪表板上的排行榜时,我们会注意到所有用户名都显示为 ID。如果排行榜使用实际用户名,那将会更好、更个性化。
如果您想查看 Client 脚本的完整代码,可以在此处找到。
设置显示名称
要更改排行榜以使用名称而不是 ID,我们需要向代码添加另一个 PlayFab API 调用。
我们使用登录代码打开 PlayFabCode.cs 脚本并添加以下方法
private void SetDisplayNameForUser( string name )
{
UpdateUserTitleDisplayNameRequest requestData = new UpdateUserTitleDisplayNameRequest() {
DisplayName = name
};
PlayFabClientAPI.UpdateUserTitleDisplayName( requestData, OnSetDisplayNameForUserResult, OnSetDisplayNameForUserError );
}
private void OnSetDisplayNameForUserResult( UpdateUserTitleDisplayNameResult response )
{
}
private void OnSetDisplayNameForUserError( PlayFabError error )
{
Debug.Log( error.ErrorMessage );
}
然后在 OnRegisterSuccess
和 OnLoginSuccess
的末尾,我们可以使用 Username
字段设置显示名称,如下所示
private void OnLoginSuccess(LoginResult result)
{
ErrorMessage.text = "";
RequestMatchmaking();
SetDisplayNameForUser( Username.text );
}
现在,当我们使用相同的帐户玩游戏时,显示会更新。
PlayFabCode.cs 的完整代码可在此处获得。
额外内容:获取排行榜数据
我们将以最后一段代码结束本系列,以展示如何检索排行榜数据。这样,如果我们想在游戏中显示排行榜,我们就可以做到!
我们在 Client 脚本中使用以下三个方法从 PlayFab 下载排行榜
private void GetLeaderboardData()
{
GetLeaderboardRequest requestData = new GetLeaderboardRequest() {
StatisticName = "Bots Destroyed",
StartPosition = 0,
MaxResultsCount = 100,
};
PlayFabClientAPI.GetLeaderboard( requestData, OnGetLeaderboardDataResult, OnGetLeaderboardDataError );
}
private void OnGetLeaderboardDataResult( GetLeaderboardResult response )
{
foreach( var entry in response.Leaderboard )
{
Debug.Log( entry.Position + ". " + entry.DisplayName + " : " + entry.StatValue );
}
}
private void OnGetLeaderboardDataError( PlayFabError error )
{
Debug.Log( error.ErrorMessage );
}
后续步骤
就是这样。除了让玩家加入并一起玩游戏之外,我们现在还可以让他们在排行榜上竞争。
这结束了本系列关于使用 PlayFab 在 Unity 项目中构建多人游戏功能的文章。但是,PlayFab 的 API 还有更多值得探索的地方。要查看并了解更多信息,请查看PlayFab 文档。我鼓励您特别关注经济和用户生成内容功能,以及 PlayFab 的分析可以提供的洞察力。
希望你喜欢本系列。祝你游戏开发顺利!
要了解有关 Azure PlayFab Analytics 的更多信息,并获取功能概述、快速入门指南和教程,请查看Azure PlayFab Analytics 文档。