【PlayFab】Leaderboardを使ってランキングを実装する【Unity】

この記事でのバージョン

  • PlayFab SDK: 2.86.2005 18

はじめに

この記事では、PlayFabのLeaderboard関連のAPIを使用しています。前提条件としてプレイヤーがログインしている必要があるので、ログインについて知りたい方は以下の記事を見てもらえると幸いです。

【PlayFab】IDの生成、ログインについて【Unity】

リーダーボードの作成

リーダーボードの実装にはまず、PlayFabの管理画面から新しいリーダーボードを作成する必要があります。

1.リーダーボード管理画面を開く

2.画面右上の「NEW LEADERBOARD」ボタンを押す

3.リーダーボードの作成

Reset frequency

リセット頻度には大きく分けて「マニュアル」と「期間指定」2種類の方法がありますが、「マニュアル」ではリーダーボードの管理画面から直接リセットを行います。

なお、「期間指定」の場合でもこちらから直接リセットを行えます。

Aggregation method

プレイヤーがリーダーボードに送信した値をどのように集計するかを決定します。

集計方法説明
Lastプレイヤーが送信した最後の値を使用します。
Minimum最低値を使用します。最低値を競うランキングに使う。
Maximum最高値を使用します。最高値を競うランキングに使う。
Sumプレイヤーが送信した値を既存の値に加算します。合計値を競うランキングに使う。

スクリプティング

ここからはLeaderboardのAPIについて解説します。

プレイヤーの名前を登録する

リーダーボードに表示するためのプレイヤー名を設定します。


using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;

public void SetPlayerDisplayName (string displayName) {
	PlayFabClientAPI.UpdateUserTitleDisplayName(
		new UpdateUserTitleDisplayNameRequest {
			DisplayName = displayName
		},
		result => {
			Debug.Log("Set display name was succeeded.);
		},
		error => {
			Debug.LogError(error.GenerateErrorReport());
		}
	);
}

リーダーボードにスコアを送信する

プレイヤーのスコアを送信する前にまず、PlayFabの管理画面からプレイヤー統計の送信許可をする必要があります。

「歯車アイコン -> Title settings」から「API Features」を選択して「Allow client to post player statistics」にチェックをいれます。

以下のコードは、リーダーボードにプレイヤーのスコアを送信するサンプルです。


using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;

public void SendStatisticUpdate (string leaderboardName,int score) {
	// 送信したい更新情報
	var statisticUpdates = new List<StatisticUpdate> {
		new StatisticUpdate {
			StatisticName = leaderboardName,
			Value = score
		}
	};

	PlayFabClientAPI.UpdatePlayerStatistics(
		new UpdatePlayerStatisticsRequest {
			Statistics = statisticUpdates
		},
		result => {
			Debug.Log("Send score was succeeded.");
		},
		error => {
			Debug.LogError(error.GenerateErrorReport());
		}
	);
}

leaderboardNameには、先ほどリーダーボードを作成したときに決めた名前(Statistic name)を指定します。

リーダーボードを取得する

以下のコードはリーダーボードを取得するサンプルです。


using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;

public void LoadLeaderboardWithStartAtSpecifiedPosition (string leaderboardName,int startPosition,int maxResultsCount) {
	PlayFabClientAPI.GetLeaderboard(
		new GetLeaderboardRequest {
			StatisticName = leaderboardName,
			StartPosition = startPosition,
			MaxResultsCount = maxResultsCount
		},
		result => {
			// リーダーボードの結果をログに表示する
			foreach (PlayerLeaderboardEntry entry in result.Leaderboard) {
				Debug.Log($"{entry.DisplayName}: {entry.StatValue}");
			}
		},
		error => {
			Debug.LogError(error.GenerateErrorReport());
		}
	);
}

GetLeaderboardの種類

リーダーボードの取得にはいくつかの種類があります。

GetLeaderboardの種類説明
GetLeaderboardリーダーボードの指定した位置から、指定された数のユーザーのリストを取得。
(フレンド限定のGetFriendLeaderboardもある)
GetLeaderboardAround Playerログイン中のプレイヤー(または指定されたプレイヤー)を中心としたランク付けされたユーザーのリスト(フレンド限定のGetFriendLeaderboardAroundPlayerもある)

おわりに

PlayFabに関して、筆者は現時点でプロジェクトに導入途中(勉強中)の段階です。

もし誤りがあれば教えてもらえると幸いです。

参考

記事をシェアしてもらえると嬉しいです!