Leaderboard は、ゲーム内でプレイヤーを友達や世界中の人たちとトップスコアを競わせる方法を提供します。 ゲームにはスコアを獲得する複数のモードを持たせることができ、さらに各モードには独自の Leaderboard を持たせることができます。 スコアリング モードでは、従来のポイント ベースのゲームのように、最高から最低の順にランク付けすることも、タイムアタック ゲームやレース ゲームのように最低から最高の順にランク付けすることもできます。 Leaderboard インターフェースは、ゲーム内から Leaderboard を表示およびアップデートするために必要なツールをデベロッパーに提供します。
スコアリング方法
Leaderboard のスコアを処理する方法の定義には 3 つの異なる側面があり、それぞれ列挙型で定義されています。
ELeaderboardSortは、スコアがソートされるかどうか、またソートされる場合は昇順か降順かを指定します。ELeaderboardFormatは書式を制御します。 スコアは、raw の数値 (ポイントなど)、または時間 (秒またはミリ秒単位のいずれか) になります。ELeaderboardUpdateMethodは、リーダーボードにプレイヤーの最新スコアを保持するか、そのプレイヤーの最高スコア (ソート方法による) を保持するかを示します。
Leaderboard のデータを取得する
ゲームでサポートされる各 Leaderboard には、これまでにプレイしたことのあるユーザー アカウントごとにエントリが存在することがあるため、Leaderboard のデータが非常に大きくなる場合があります。
こうした理由から、検索はチャンクで行われ、ゲームはいくつかの方法で Leaderboard の一部をリクエストできます。
Leaderboard のデータを取得するすべてのメソッドは、オンライン サービスから返送するテーブルの定義を保持する FOnlineLeaderboardRead 型のパラメータ (関連するデータ型については FOnlineLeaderboardRead を参照) を受け取り、bool で完了時に成功または失敗を示す FOnLeaderboardReadComplete 型のデリゲートを呼び出します。
次のクエリ オプションがサポートされています。
| 機能 | クエリの説明 |
|---|---|
ReadLeaderboards |
明示的なユーザーリスト (FUniqueId による) を受け取り、それらのユーザーのみの Leaderboard スコアを要求します。 |
ReadLeaderboardsForFriends |
ローカル ユーザー インデックスが与えられた場合、そのユーザーの各 フレンド のリーダーボード スコアを見つけます。 |
ReadLeaderboardsAroundRank |
ランクと範囲を受け入れます。世界中のトップ プレイヤーのリストを参照するのに役立ちます。指定したランクを中心に、指定した範囲 (上下) の リーダーボードのスコアを取得します。たとえば、ランク 100 と範囲 50 は、50 位から 150 位のプレイヤーのレコードを要求します。 |
ReadLeaderboardsAroundUser |
ReadLeaderboardsAroundRank に似ていますが、明示的なランクをユーザーの FUniqueNetId に置き換え、そのユーザーのランクの指定された範囲内のレコードを検索します。このメソッドは、複数回の呼び出しを行わずに、プレイヤーが世界ランキングでどの位置にいるかを示すのに便利です。 |
Leaderboard のデータをアップロードする
個々のプレイヤーのスコアを書き込むには、WriteLeaderboards を使用して、後でオンライン サービスに送信される更新 (FOnlineLeaderboardWrite 型) をキャッシュします。
各 FOnlineLeaderboardWrite オブジェクトは、セッション名とプレイヤー (FUniqueNetId で識別) に関連付けられています。
ゲームがセッション データをオンライン サービスのレコードにコミットする準備ができたら、FlushLeaderboards はキャッシュされたデータを送信してローカル システムからクリアし、完了時にオンライン サブシステムの OnLeaderboardFlushComplete デリゲートを呼び出します。
WriteLeaderboards で一度にキャッシュできる更新は 5 つだけです。
それ以降の更新は破棄されるので、そうなる前に必ず FlushLeaderboards を呼び出してください。