シーズンのランキング
このチュートリアルでは、ランキングのバージョン管理の概念について説明します。 特定のランキングの異なるバージョンを使用する場合が複数あります。 たとえば、毎月のトーナメント モードのゲームでは、ランキングの構造は変わりませんが、特に競争の激しいゲームでは、プレイヤーが変化する可能性が最も高くなります。
「基本ランキングの作成」の例を続けます。 アーケード ゲームが非常に人気があるとします。 そのため、"Top of the Mountain" という新しいモードが導入されます。 毎月、このゲームではどのプレイヤーでも参加できるトーナメントが開催されます。 上位 100 位に入ったプレイヤーはメイン メニューの特別なランキングに表示されるので、誰がゲームで最高のプレイヤーなのかを誰もが確認できます。
バージョン管理のためのランキング定義の作成
前の例では、ランキング定義を作成するときに、バージョン管理の VersionConfiguration
パラメーターの重要性についてのヒントがありました。 ここでは、その使い方と仕組みについて詳しく説明します。
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 1000,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 12,
ResetInterval = ResetInterval.Month,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "arcadeScoreTournament",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
この例と基本ランキングの主な違いは VersionConfiguration
パラメーターです。 このパラメーターを使用すると、同じランキングのいくつのバージョンのクエリを実行できるかを指定する MaxQueryableVersions
設定を定義できます。 この場合は、12 個のバージョンに対してクエリを実行するように設定します。これにより、より新しい 12 個のランキングに対してクエリを実行できます。
ResetInterval
パラメーターは、リセット プロセスが発生する頻度を定義します。 このアクションでは、以前と同じ構成で空のランキングが作成され、バージョン パラメーターが次のように変更されます: N = N + 1、ランキング定義の作成時には N = 0。
たとえば、バージョン パラメーターが 2 に等しいランキングがあり、ランキングに 100 個のエントリがあるとします。 ここで、そのランキングのバージョンを増やすと、バージョン パラメーターが 3 で空の新しいランキングが生成されます。 一方、以前のランキングはクエリを実行できるようにシステム内に残ります。
ResetInterval
は複数の方法で機能します。 この例では月単位ですが、開発者のニーズに応じて変更できます。 この特定のケースでは、ランキングは設定された瞬間から毎月自動的にリセットされることを意味します。 以下のリセット戦略をサポートしています:
- Day
- Hour
- Manual
- Month
- Week
使用可能なすべての構成の詳細については、こちらの API ドキュメントを参照してください: 「API リファレンス ランキングの作成」
ランキングのバージョンをインクリメントする
この新しい構成では、トーナメント モードの同じランキングの複数のバージョンを作成できます。 しかし、問題のためにランキングを手動でリセットし、トーナメントを最初からやり直す必要がある場合はどうなりますか? このような場合は、API を使用して手動でリセットを実行できます。 SDK を使用する例を次に示します:
public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
};
PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}
古いバージョンのクエリを実行する
以前のバージョンのランキングのクエリを実行する必要がある場合は、すべての GetLeaderboards API で使用可能な version
パラメーターを使用できます。
SDK を使用する例を次に示します:
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,
Version = 1
};
PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
return lbResponse.Result.Rankings;
}
これで、ランキングのバージョン管理に関するあらゆる課題に対処できるようになりました。 ここで重要な点は、バージョンとして保持することにしたランキング定義の数は、サービス内のストレージを使用するため、計測されるということです。 詳細については、こちらをご覧ください:
まとめ
このチュートリアルでは、次の操作を行う方法について説明しました:
- 適切なリセット戦略を使用してランキングを作成します。
- ランキングのバージョンをインクリメントします。
- 以前のバージョンのランキングのクエリを実行します。