アーカイブ トーナメントの結果にアクセスする
このチュートリアルでは、アーカイブされたランキング状態にアクセスする方法について説明します。
各ランキングは、手動または自動的にリセットすることができます。つまり、すべてのプレイヤーの統計値が削除されてクリア状態になり、ランキング バージョンが実装されます。
ただし、この前に、PlayFab により各プレイヤーのランキング統計値のスナップショットが作成されます。 これにより、ランキングのアーカイブされたバージョンにアクセスできるようになります。
注意
すべてのタイトルでは、ランキングの最近アーカイブされたバージョンにアクセスできます。これにより、最新バージョンと直前のバージョンが提供されます。 たとえば、現在のランキング バージョンが 3 の場合、バージョン 3 とアーカイブ バージョンの 2 にのみアクセスできます。
初期セットアップ
このガイドを使用する前に、タイトルに数人のプレイヤーが既に登録されていることを確認してください。 次のスクリーンショットは、LoginWithCustomID API 呼び出しを使って人為的に登録された 5 人のプレイヤーを示しています。
ランキングを定義してシミュレートする
このステップでは、テスト目的でランキングを作成します。 次に、ランキングにデータを入力して数回リセットすることにより、ランキングの反復操作をシミュレートします。
ゲーム マネージャー を開きます。
- [ランキング] セクションに移動します。
- 次に、以下に示すように [新しいランキング] ボタンを選択します。
新しいランキングを構成するには
- [統計] の名前を TestScore に設定します。
- [リセット頻度] は [手動] のままにします。
- 既定の [集計] 方法のままにします。
- [ランキングを保存] を選択して送信します。
新しい [ランキング] ページが表示され、空白のデータがレンダリングされます (以下を参照)。
テスト セクションを開始する
Important
次のセクションは、この例の目的でテスト データを入力する方法の例を示します。 実際のゲームでは、自然な方法でこのデータが入力されます。
次のステップでは、ランキングの一部のデータをシミュレートします。 特定のプレイヤーのランダム統計情報を設定する CloudScript ハンドラーを作成すると、これを最もすばやく行うことができます。 [すべてのプレイヤー] セグメント上でプレイヤーごとにこのハンドラーを呼び出します。
その結果、各プレイヤーがランダムな統計値を取得します。実際のシナリオの近似値としては十分です。
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 をアップロードしましょう。 ゲーム マネージャーを使います。
- [自動化] タブに移動します。
- 次に、「CloudScript] サブタブに移動します。
- CloudScript コードを挿入します。
- [リビジョンとして保存] を選択します。
- 最後に、リビジョンをデプロイします。
次に、特定のセグメントに対して CloudScript を実行するようにタスクを定義する必要があります。
- [プレイヤー] タブに移動します。
- [セグメント] サブタブに移動します。
既定では、PlayFab により [すべてのプレイヤー] セグメントが自動的に作成されます。 このセグメントは、タイトルにすべてのプレイヤーを登録する必要があるときに特に便利です (まさにこの例が当てはまります)。
- [すべてのプレイヤー] セグメント を選択します。
- 最後に、[タスクの実行...] を選択します。
注意
一覧に [すべてのプレイヤー] セグメントがない場合、「プレイヤーのセグメント化」クイックスタートを参照して作成してください。
タスクを構成するには、次の手順を実行します。
- [名前] を設定します。
- タスクの種類が [セグメント内の各プレイヤーに対してアクションを実行] に設定されていることを確認します。
- さらに、[セグメント] で [すべてのプレイヤー] が選択されていることを確認します。
- 新しい [アクション] を追加します。
- [種類] で [CloudScript の実行] を選択します。
- 次に、[CloudScript 関数] で PopulateLeaderboard ハンドラーを選択します。
- 最後に、[保存して実行] ボタンを選択します。
- 実行結果が [成功] になっていることを確認します。
テストのセクションの終了
テスト データの入力
- もう一度 [ランキング] タブに移動します。
- [ランキング] を選択します。
- [ランキング] にランダムな値が入力されているのがわかります。
- [ランキング] をリセットします。
これにより、現在あるすべてのデータのスナップショットが作成された後、すべてのプレイヤーの統計値が無効になって、バージョンが増分されます。
- ランキングがリセットされたら、もう一度 CloudScript タスクを実行します。
- これを 2 ~ 3 回繰り返し、リセットして再入力します。
最終的にランキング バージョン (1) になります。
- 現在のバージョンのデータが、左側の表に表示されます (3)。
- 以前のバージョンのアーカイブ データが利用可能になります (2)。
- 最新バージョンのみを使用できます。 これは、すべてのタイトルに適用されます。
ゲーム マネージャーを使ってアーカイブ データにアクセスする
[ランキング] ページからアーカイブされた結果に直接アクセスすることができます。
- [ランキング] タブに移動します。
- 必要なランキングを選択します。
- ランキングにアーカイブ バージョンが含まれている場合、次のスクリーンショットに示すダウンロード リンクを使って 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 オブジェクトのドキュメントをご覧ください。