65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2022 年 2 月 21 日

CPOL

4分钟阅读

viewsIcon

6086

本文将演示如何利用 PlayFab Unity SDK 的内置功能,将排行榜添加到我们的游戏中。

在本文中,我们将学习为我们的 Unity 游戏项目配置排行榜,并将统计数据报告给 PlayFab 服务器,使其成为排行榜的一部分。

在这里,我们将为我们目前的 Unity 游戏项目添加排行榜功能,只需几个简单的代码片段,无需服务器配置或维护。

欢迎来到本 PlayFab 与 Unity 系列的最后一篇!我们将通过为来自上一篇文章的代码设置排行榜来结束这个项目。

要求

遵循本指南需要一个PlayFab 帐户和以下软件

任务简报

使用玩家统计数据构建排行榜可能具有挑战性。我们要确保数据快速且全局可用、可更新且可查询。幸运的是,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 );
}

然后在 OnRegisterSuccessOnLoginSuccess 的末尾,我们可以使用 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 文档

© . All rights reserved.