Unity Gaming ServicesのLeaderboards
Unity Gaming Services (UGS)
には、ユーザーのスコアを集計し、順位をつけるLeaderboards
というサービスが用意されています。
簡単に言えばランキング機能です。
スコア制のゲームでは、リーダーボードを追加することで競争の楽しさが生まれ、プレイヤーが繰り返しプレイする動機付けにもなります。
Leaderboardsを使用するための準備
UnityEditor上でPackage Manager
を開き、以下の手順でLeaderboards
をインストールします。
- 左側の雲のアイコンを選択します。
UGS
のパッケージ一覧からLeaderboards
を選択します。Install
をクリックします。
インストールが完了すると、Project Settings
のServices
内に
Leaderboards
が追加されます。
「Go to Dashboard」を押すと、ブラウザで Unity Cloud の Leaderboards 管理画面を開けます。
Leaderboardsで出来ること
Leaderboards
の主な機能として以下のものがあります。
スコアの送信と管理
ゲームのリザルト画面などでプレイヤーのスコアを送信し、ランキングを更新できます。
ランキングの取得
ランキングを取得し、ゲーム画面上に表示することが出来ます。
ランキングの取得方法は以下のように調整できます。
- トップランキング(上位10名など)
- プレイヤー周辺(プレイヤー自身と前後5名など)
スコアの種類
ランキング毎に更新方法を選べます。
- ベストスコアを保存
- 累積スコアを保存
- 最新スコアを保存
また、昇順と降順を選ぶことも出来ます。
スコアのフィルタリング
ランキングごとに集計期間を設定できます。
これにより、
日間・週間・月間ランキング
といった形式で集計できます。
また、期間を設けずに常時更新のランキングにすることも可能です。
Leaderbordsの設定
ダッシュボード上でランキングを設定する手順を見てみます。
初めての場合、ダッシュボードでLeaderborads
画面を開いたら、Launch
ボタンを押します。
準備が出来たら、画面上にある「Add Leaderboard」ボタンを押します。
新しいLeaderboard
作成に進み、Name
とID
を入力します。
Name
には、アルファベット・数字・ハイフン・アンダースコア・スペースのみ使用できます。分かりやすい名前を設定しましょう。
ID
は、スコアの送受信を行う際に使用するため、メモしておくと便利です。
次にランキングを昇順にするか、降順にするかとスコアの種類を選択します。
次に、ランキングを自動でリセットするかどうかを設定します。
リセットしない場合は「No」を選択します。
リセットする場合は「Yes」を選択し、一度だけリセットするか、繰り返しリセットするかを選択します。
また、リセットの間隔(毎日・毎週・毎月など)も自由に設定できます。
スコアごとにユーザーを階層化できます。今回は割愛します。
Finish
を押せばLeaderboard
の作成は終わりです。
スコアを送信する
事前にAuthentication
でサインインした状態にしておく必要があります。
詳しくは前回の記事をご覧ください。
以下のようなコードで、先ほど作成したLeaderboardId
(今回はRanking1
)を指定してスコアを送信しています。
await LeaderboardsService.Instance.AddPlayerScoreAsync("Ranking1", 123);
これだけでダッシュボード上でもスコアが登録されているのが確認出来ます。
ランキングの取得
プレイヤー自身のランキング
以下のようなコードで、プレイヤー自身のランキングを取得できます。
var ranking = await LeaderboardsService.Instance.GetPlayerScoreAsync("Ranking1");
_rankingText.text = $"{ranking.Rank}: {ranking.PlayerName} {ranking.Score} \n";
戻り値から、ランク、スコア、ユーザー名、ユーザーIDなどが取得できます。
上位ランキング
上位ランキングを取得したい場合は以下の様にします。
Limit
に渡す数を変更すれば取得するランキング数も変更できます。
// 上位10件を取得
var option = new GetScoresOptions
{
Limit = 10
};
var ranking = await LeaderboardsService.Instance.GetScoresAsync("Ranking1", option);
_rankingText.text = "";
foreach (var rank in ranking.Results)
{
_rankingText.text += $"{rank.Rank}: {rank.PlayerName} {rank.Score} \n";
}
プレイヤー周辺のランキング
プレイヤーの前後いくつかのランキングを取得したい場合は以下の様にします。
RangeLimit
に指定する数で、プレイヤーの前後の件数を指定します。
// 自分のランキングの前後5件を取得
var options = new GetPlayerRangeOptions
{
RangeLimit = 5,
};
var ranking = await LeaderboardsService.Instance.GetPlayerRangeAsync("Ranking1", options);
_rankingText.text = "";
foreach (var rank in ranking.Results)
{
_rankingText.text += $"{rank.Rank}: {rank.PlayerName} {rank.Score} \n";
}
まとめ
今回は、UGS
のLeaderboards
について解説しました。
Leaderboards
を使うことで、オンラインランキングを簡単に実装できます。
スコア制のゲームでは、ランキングを導入することでユーザーが何度も挑戦したり、他のプレイヤーと競い合う動機になります。
総合ランキングで上位に入れなくても、週間ランキングなら上位を狙えるプレイヤーもいるかもしれません。
機会があれば、ご自身のゲームにもランキング機能を実装してみてください。