使用排行榜的手动层
在本教程中,我们将了解如何在排行榜服务中应用某些属性,以便为玩家创建层系统。 为了了解如何基于服务属性创建手动层系统,我们将从一个示例开始。 想象一下,我们有一个僵尸杀人游戏,玩家有有限的时间得分尽可能多。 可以采用不同的策略来获得更多积分,还有一些积分可以不受到任何伤害。
在此示例中,玩家根据他们在每场比赛中的表现获得经验点。 我们希望创建一个等级系统,以识别排名为“救世主”的顶级玩家,而其余玩家将分布在不同等级(如铜牌、银牌、金牌、白金和钻石)之间。
创建排行榜
第一步是创建一个排行榜定义,其中包含用于排名玩家的main元素。 对于僵尸游戏,我们将使用多个分数。 以下示例演示如何使用 C# SDK 创建排行榜定义。
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 10000,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "Eliminations",
SortDirection = LeaderboardSortDirection.Descending,
},
new LeaderboardColumn()
{
Name = "SkillPoints",
SortDirection = LeaderboardSortDirection.Descending,
}
new LeaderboardColumn()
{
Name = "Deaths",
SortDirection = LeaderboardSortDirection.Ascending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
在这里,我们定义了三个不同的分数的排行榜。 有关创建排行榜或中断工作原理的详细信息,检查以下指南:使用排行榜执行更多操作。
手动分层
正确创建排行榜后,现在可以继续定义创建层的方式。 首先,我们需要定义如何拆分玩家群体。 通常,由于排名越高,玩家就越少。 考虑到这一概念,我们将如何定义层。
- 铜牌:0 - 35% 的玩家。
- 银牌:35% - 60% 的玩家。
- 金牌:60%-80%的玩家。
- 白金:80% - 90% 的玩家。
- 钻石:90% - 99.5% 的玩家。
- 救世主:前 0.05% 的玩家。
由于此过程是分层系统的手动方法,因此玩家的分布需要以开发人员认为合适的任何方式进行存储。
为了检索数据,我们将使用以下示例:
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
{
LeaderboardName = leaderboardName,
StartingPosition = 1,
PageSize = 20,
AuthenticationContext = context,
};
PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
return lbResponse.Result;
}
此示例是我们从排行榜检索数据的多种方法之一。 在响应的 Result 属性中,我们将找到一个名为 EntryCount
的属性,该属性告诉我们排行榜当前有多少行。
此数字不同于 SizeLimit
,它表示排行榜的最大行数。
为了确定玩家的等级,我们采用他们在排行榜中的位置,并将其除以 EntryCount
属性,以查看他们在定义的层中的位置。
快速示例:
- 排名靠前的玩家:在 10,000 人中,8500 的玩家在人口的 85% 范围内,属于铜牌级别。
- 中级球员:在 10,000 名中,排名为 3500 的玩家在前 35% 的玩家中,属于金牌级别。
- 顶级球员:在 10,000 名中 50 名的玩家在前 0.5% 的玩家中,成为“救世主”。
结论
在本教程中,我们学习了如何执行以下操作:
- 创建排行榜。
- 了解如何从排行榜查询数据。
- 了解如何基于百分位数创建手动层分布。
- 了解如何将玩家位置的结果映射到实际层。