Unity Gaming ServicesのLeaderboards

Unity Gaming Services (UGS)には、ユーザーのスコアを集計し、順位をつけるLeaderboardsというサービスが用意されています。

簡単に言えばランキング機能です。

スコア制のゲームでは、リーダーボードを追加することで競争の楽しさが生まれ、プレイヤーが繰り返しプレイする動機付けにもなります。

Leaderboardsを使用するための準備

UnityEditor上でPackage Managerを開き、以下の手順でLeaderboardsをインストールします。

  1. 左側の雲のアイコンを選択します。
  2. UGSのパッケージ一覧からLeaderboardsを選択します。
  3. Installをクリックします。

インストールが完了すると、Project SettingsServices内に

Leaderboardsが追加されます。

「Go to Dashboard」を押すと、ブラウザで Unity Cloud の Leaderboards 管理画面を開けます。

Leaderboardsで出来ること

Leaderboardsの主な機能として以下のものがあります。

スコアの送信と管理

ゲームのリザルト画面などでプレイヤーのスコアを送信し、ランキングを更新できます。

ランキングの取得

ランキングを取得し、ゲーム画面上に表示することが出来ます。

ランキングの取得方法は以下のように調整できます。

  • トップランキング(上位10名など)
  • プレイヤー周辺(プレイヤー自身と前後5名など)

スコアの種類

ランキング毎に更新方法を選べます。

  • ベストスコアを保存
  • 累積スコアを保存
  • 最新スコアを保存

また、昇順と降順を選ぶことも出来ます。

スコアのフィルタリング

ランキングごとに集計期間を設定できます。

これにより、

日間・週間・月間ランキング

といった形式で集計できます。

また、期間を設けずに常時更新のランキングにすることも可能です。

Leaderbordsの設定

ダッシュボード上でランキングを設定する手順を見てみます。

初めての場合、ダッシュボードでLeaderborads画面を開いたら、Launchボタンを押します。

準備が出来たら、画面上にある「Add Leaderboard」ボタンを押します。

新しいLeaderboard作成に進み、NameID

を入力します。

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";
}

まとめ

今回は、UGSLeaderboardsについて解説しました。

Leaderboardsを使うことで、オンラインランキングを簡単に実装できます。

スコア制のゲームでは、ランキングを導入することでユーザーが何度も挑戦したり、他のプレイヤーと競い合う動機になります。

総合ランキングで上位に入れなくても、週間ランキングなら上位を狙えるプレイヤーもいるかもしれません。

機会があれば、ご自身のゲームにもランキング機能を実装してみてください。

🔗関連ページ