访问已存档的锦标赛结果

本教程说明如何能够访问存档的排行榜状态。

可手动或自动重置每个排行榜 - 这意味着将删除所有玩家的统计值,从而导致清除 状态,并且将实现排行榜版本。

不过,在此之前,PlayFab 会为每个玩家创建一个所有排行榜统计值的快照。 这样,您可以访问排行榜的此存档 版本。

注意

所有游戏都允许你访问排行榜的最新存档版本,并提供当前版本和最新版本。 例如,如果当前排行榜版本为 3,则只能访问版本 3 和存档版本 2

初始设置

使用本指南前,请确保已有部分玩家注册了游戏。 以下屏幕截图是使用 LoginWithCustomID API 调用人为注册的 5 个玩家。

Game Manager - Players - Most recent logins

定义和模拟排行榜

在此步骤中,为了进行测试,我们将创建一个排行榜。 然后,通过多次填充并重置排行榜来模拟排行榜迭代过程。

打开 Game Manager:

  1. 导航到 Leaderboards 部分。
  2. 选择 New Leaderboard 按钮,如下所示。

配置新的排行榜:

  1. Statistic 名称设置为 TestScore
  2. Reset Frequency 保留为 Manually
  3. 保留默认 Aggregation 方法。
  4. 通过选择 Save Leaderboard,进行提交。

Game Manager - Leaderboards - New Leaderboard - Properties

最后会打开新的 Leaderboards 页面,该页面将显示空白数据(见下文)。

Game Manager - Leaderboards - Edit Leaderboard

开始测试部分

重要

下一节举例说明如何出于此示例目的填充测试数据。 实际 的游戏将以更自然的方式填充这些数据。

下一步是模拟排行榜的一些数据。 执行此操作的最快方式是创建 CloudScript 处理程序,它为给定玩家设置随机统计信息。 我们将对“All Players”细分的每个玩家调用该处理程序。

因此,每个玩家都将获得一个随机统计值,足够 接近真实应用场景。

首先定义 CloudScript(请参阅代码注释了解详细信息)。

// Should be invoked from a task that runs over certain segment
handlers.PopulateLeaderboard = (args,ctx) => {
    // When handler is executed as a task over the segment
    // we can extract individual player id using the next line:
    let playerId = ctx.playerProfile.PlayerId;

    // Use player id and update player statistics as follows:
    server.UpdatePlayerStatistics({
        PlayFabId : playerId,
        Statistics : [
            {
                "StatisticName": "TestScore",
                "Value": getRandomInRange(100,1000)
            }
        ]
    });
}

// Utility method to generate random number
let getRandomInRange = (min, max) => {
    return Math.round(Math.random() * (max - min) + min);
}

上传 CloudScript。 使用 Game Manager:

  1. 导航到 Automation 选项卡。
  2. 然后,导航到 CloudScript 子选项卡。
  3. 插入 CloudScript 代码。
  4. 选择 Save as Revision
  5. 最后,选择 Deploy Revision

Game Manager - Automation - CloudScript - 上传 CloudScript

接下来,我们需要定义一个任务,以便对特定细分执行 CloudScript:

  1. 导航到 Players 选项卡。
  2. 然后,导航到 Segments 子选项卡。

默认情况下,PlayFab 生成一个 All Players 细分。 如果需要游戏中注册的所有玩家(我们就是这种情况),此细分特别有用。

  1. 选择 All Players Segment
  2. 最后,选择 Run Task...

注意

如果列表中没有“All Players”细分,请参阅我们的玩家细分快速入门,创建一个。

Game Manager - Players - Segments - All Players - Run Task

配置任务:

  1. 设置 Name
  2. 确保将任务类型设置为 Run actions on each Player in a Segment
    • 此外,确认在 下选择了 所有玩家
  3. 添加一个新 Action
  4. Type 下,选择 Execute CloudScript
  5. 然后在 CloudScript Function 下,选择 PopulateLeaderboard 处理程序。
  6. 最后,选择 Save and Run 按钮。

Game Manager - Configure Task

  • 确保执行结果为 Successful

Game Manager - Task Execution Succeeded

测试部分结束

填充测试数据

  1. 再次导航到 Leaderboards 选项卡。
  2. 选择我们的 Leaderboard

Game Manager - Leaderboards - Test Score

  1. 可以看到您的 Leaderboard 中已填充了随机值。
  2. 重置 Leaderboard

重置测试分数排行榜

这将创建我们当前具有的所有数据的快照,然后置空 每个玩家的统计值,并使版本递增。

  • 重置排行榜后,再次运行 CloudScript 任务。
  • 重复此操作 2-3 次,然后重置并重新填充。

您最终将获得多个 Leaderboard 版本 (1)

  • 当前版本数据将显示在左侧表中 (3)
  • 以前版本的存档数据可供使用 (2)
  • 只有最新版本可用。 这适用于所有游戏。

Game Manager - Leaderboards - Leaderboard Versions

使用 Game Manager 访问存档的数据

可以直接从 Leaderboard 页面访问存档的结果:

  1. 导航到 Leaderboards 选项卡。
  2. 选择所需的 Leaderboard

Game Manager - Leaderboards - Select Leaderboard

  1. 如果 Leaderboard 包含存档修订,则可以使用下面屏幕截图中显示的下载链接下载 JSON 数据。

Game Manager - Leaderboards - Download Archived Revision

使用 API 访问存档数据

以下代码用于提取排行榜的最新(当前)版本。

PlayFabClientAPI.GetLeaderboard(new GetLeaderboardRequest()
{
    StatisticName = "TestScore",
}, result =>
{
    Debug.Log("Leaderboard version: "+result.Version);
    foreach (var entry in result.Leaderboard)
    {
        Debug.Log(entry.PlayFabId+" "+entry.StatValue);
    }
}, FailureCallback);

结果看起来类似于下面提供的示例。

调试输出 - 显示排行榜版本

或者,您可以指定要加载的排行榜版本。

PlayFabClientAPI.GetLeaderboard(new GetLeaderboardRequest()
{
    StatisticName = "TestScore",
    Version = 1
}, result =>
{
    Debug.Log("Leaderboard version: "+result.Version);

    foreach (var entry in result.Leaderboard)
    {
        Debug.Log(entry.PlayFabId+" "+entry.StatValue);
    }
}, FailureCallback);

结果看起来类似于下面提供的示例。

调试输出 - 显示排行榜版本 1

所有游戏都允许你访问排行榜的最新存档版本。 尝试提取较旧 版本将导致错误(如下所示)。

错误 - 排行榜版本不可用

这些规则适用于所有排行榜请求。

请参阅 GetLeaderboardResult 对象的文档,了解有关使用排行榜数据可获得的有用属性。