ランキングを使用した手動階層
このチュートリアルでは、ランキング サービス内の一部のプロパティを適用して、プレイヤー向けの階層システムを作成する方法について説明します。 サービス プロパティに基づいて手動階層システムを作成する方法を理解するために、最初に例から始めます。 プレイヤーが限られた時間内にできるだけ多くのポイントを獲得する、ゾンビを殺すゲームがあるとします。 さまざまな戦略を採用すると、より多くのポイントを獲得できます。また、ダメージを受けないことに対するポイントもあります。
この例では、プレイヤーは、各対戦でのパフォーマンスに基づいて経験値ポイントを獲得します。 "救世主" のランクを持つ上位プレイヤーを特定する階層システムを作成するとともに、残りのプレイヤーはブロンズ、シルバー、ゴールド、プラチナ、ダイヤモンドなどの異なるランクに分散させたいと考えています。
ランキングを作成する
最初のステップは、プレイヤーをランク付けするための主な要素を含むランキング定義を作成することです。 ゾンビ ゲームでは、複数のスコアを使用します。 次の例は、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);
}
ここでは、3 つの異なるスコアを使用してランキングを定義します。 ランキングの作成やタイブレークのしくみの詳細については、次のガイドを確認してください: ランキングでより多くのことを行う。
手動階層化
ランキングが適切に作成されたので、階層を作成する方法の定義に進むことができます。 最初に、プレイヤーの母集団を分割する方法を定義する必要があります。 通常、ランクが高くなるほど、プレイヤーの数は少なくなります。 このコンセプトを念頭に置いて、ここでは、階層を定義する方法を示します。
- ブロンズ: プレイヤーの 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;
}
この例は、ランキングからデータを取得する複数の方法の 1 つです。 応答の Result プロパティで、ランキングに現在存在する行数を示す EntryCount
というプロパティを見つけます。
この数は、ランキングの最大行数を表す SizeLimit
とは異なります。
プレイヤーの階層を決定するために、ランキング内の位置を確認し、これを EntryCount
プロパティで除算して、定義された階層内のどこに収まるかを確認します。
簡単な例:
- 下位プレイヤー: 10,000 人中 8500 番のプレイヤーは母集団の 85% に入り、ブロンズ階層に分類されます。
- 中間プレイヤー: 10,000 人中 3500 番のプレイヤーは上位 35% に入り、ゴールド階層に分類されます。
- 上位プレイヤー: 10,000 人中 50 番のプレイヤーは上位 0.5% に入り、"救世主" になります。
まとめ
このチュートリアルでは、次の操作を行う方法について説明しました:
- ランキングを作成する
- ランキングからデータに対してクエリを実行する方法について説明します。
- パーセンタイルに基づいて階層の手動分布を作成する方法について説明します。
- プレイヤーの位置の結果を実際の階層にマップする方法について説明します。