访问已存档的锦标赛结果
本教程说明如何能够访问存档的排行榜状态。
可手动或自动重置每个排行榜 - 这意味着将删除所有玩家的统计值,从而导致清除 状态,并且将实现排行榜版本。
不过,在此之前,PlayFab 会为每个玩家创建一个所有排行榜统计值的快照。 这样,您可以访问排行榜的此存档 版本。
注意
所有游戏都允许你访问排行榜的最新存档版本,并提供当前版本和最新版本。 例如,如果当前排行榜版本为 3,则只能访问版本 3 和存档版本 2。
初始设置
使用本指南前,请确保已有部分玩家注册了游戏。 以下屏幕截图是使用 LoginWithCustomID API 调用人为注册的 5 个玩家。
定义和模拟排行榜
在此步骤中,为了进行测试,我们将创建一个排行榜。 然后,通过多次填充并重置排行榜来模拟排行榜迭代过程。
打开 Game Manager:
- 导航到 Leaderboards 部分。
- 选择 New Leaderboard 按钮,如下所示。
配置新的排行榜:
- 将 Statistic 名称设置为 TestScore。
- 将 Reset Frequency 保留为 Manually。
- 保留默认 Aggregation 方法。
- 通过选择 Save Leaderboard,进行提交。
最后会打开新的 Leaderboards 页面,该页面将显示空白数据(见下文)。
开始测试部分
重要
下一节举例说明如何出于此示例目的填充测试数据。 实际 的游戏将以更自然的方式填充这些数据。
下一步是模拟排行榜的一些数据。 执行此操作的最快方式是创建 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:
- 导航到 Automation 选项卡。
- 然后,导航到 CloudScript 子选项卡。
- 插入 CloudScript 代码。
- 选择 Save as Revision。
- 最后,选择 Deploy Revision。
接下来,我们需要定义一个任务,以便对特定细分执行 CloudScript:
- 导航到 Players 选项卡。
- 然后,导航到 Segments 子选项卡。
默认情况下,PlayFab 生成一个 All Players 细分。 如果需要游戏中注册的所有玩家(我们就是这种情况),此细分特别有用。
- 选择 All Players Segment。
- 最后,选择 Run Task... 。
注意
如果列表中没有“All Players”细分,请参阅我们的玩家细分快速入门,创建一个。
配置任务:
- 设置 Name。
- 确保将任务类型设置为 Run actions on each Player in a Segment。
- 此外,确认在 段 下选择了 所有玩家。
- 添加一个新 Action。
- 在 Type 下,选择 Execute CloudScript。
- 然后在 CloudScript Function 下,选择 PopulateLeaderboard 处理程序。
- 最后,选择 Save and Run 按钮。
- 确保执行结果为 Successful。
测试部分结束
填充测试数据
- 再次导航到 Leaderboards 选项卡。
- 选择我们的 Leaderboard 。
- 可以看到您的 Leaderboard 中已填充了随机值。
- 重置 Leaderboard。
这将创建我们当前具有的所有数据的快照,然后置空 每个玩家的统计值,并使版本递增。
- 重置排行榜后,再次运行 CloudScript 任务。
- 重复此操作 2-3 次,然后重置并重新填充。
您最终将获得多个 Leaderboard 版本 (1):
- 当前版本数据将显示在左侧表中 (3)。
- 以前版本的存档数据可供使用 (2)。
- 只有最新版本可用。 这适用于所有游戏。
使用 Game Manager 访问存档的数据
可以直接从 Leaderboard 页面访问存档的结果:
- 导航到 Leaderboards 选项卡。
- 选择所需的 Leaderboard。
- 如果 Leaderboard 包含存档修订,则可以使用下面屏幕截图中显示的下载链接下载 JSON 数据。
使用 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);
结果看起来类似于下面提供的示例。
所有游戏都允许你访问排行榜的最新存档版本。 尝试提取较旧 版本将导致错误(如下所示)。
这些规则适用于所有排行榜请求。
请参阅 GetLeaderboardResult 对象的文档,了解有关使用排行榜数据可获得的有用属性。