次の方法で共有


シーズンのランキング

このチュートリアルでは、ランキングのバージョン管理の概念について説明します。 特定のランキングの異なるバージョンを使用する場合が複数あります。 たとえば、毎月のトーナメント モードのゲームでは、ランキングの構造は変わりませんが、特に競争の激しいゲームでは、プレイヤーが変化する可能性が最も高くなります。

基本ランキングの作成」の例を続けます。 アーケード ゲームが非常に人気があるとします。 そのため、"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;
}

これで、ランキングのバージョン管理に関するあらゆる課題に対処できるようになりました。 ここで重要な点は、バージョンとして保持することにしたランキング定義の数は、サービス内のストレージを使用するため、計測されるということです。 詳細については、こちらをご覧ください:

まとめ

このチュートリアルでは、次の操作を行う方法について説明しました:

  • 適切なリセット戦略を使用してランキングを作成します。
  • ランキングのバージョンをインクリメントします。
  • 以前のバージョンのランキングのクエリを実行します。

関連項目