初心者でも簡単にランキング機能が即実装出来る「PlayFab Ranking Tools」を配布!もちろん無料!

目次

アセットダウンロード

以下からダウンロード出来ます。
導入方法をちゃんと読まずに進めるとエラーが出ます...。読んでからインストールしましょう!

あわせて読みたい
【Unity】ランキング機能をお手軽実装!PlayFabRankingTools - Yu-Rin-Chiのゲ制工房 - BOOTH PlayFabを使い、ランキング実装が、10行以内のコードで実装ができるようになるライブラリです。 通信中のUI表示や、エラーハンドリングの対応も行っています。 デバッグ用...

バージョン・変更履歴

V2.00(2025/9)
- 導入までの手順のシンプル化、カスタマイズ性の向上
- エラーハンドリングの厳重化

V1.01(2024/11)
・ランキングデータ取得時にユーザIDも取得するように修正
・ランキング用のシーンが破棄された場合でも安全に処理が終了するように修正

V1.00(2024/11)
初版リリース

PlayFabRankingToolsとは

前置きがどうでも良い人はこの部分を飛ばしてください。

まず、Unityなどのゲームでランキング機能や、マッチング機能などを実装する場合、ゲームデータをやり取りするためのサーバーが必要になります。

ただ、個人や少人数で開発する場合、サーバーなどのバックエンド環境を作るには難易度が高く、時間も掛かります。
そこで、サーバー側のことをできるだけ意識せずに、比較的簡単にランキングやマッチング機能などを実装出来る、PlayFabというMicrosoft社のサービスがあります。
ランキング機能を使う分には、10万ユーザまで無料という太っ腹なこともあり、個人開発や小規模開発の場合は、PlayFabを使われているところも増えてきているとは思います。

2023年以前はニフクラという、初心者フレンドリーなランキング機能を提供しているniftyのサービスがあったのですが廃止されてしまいました。2024年現在、個人開発などの場合、ランキング機能はPlayFabを使った実装が中心になってきていると感じます。

ただ、個人的には、はじめてこのPlayFabという機能を使ってランキング機能を実装した時、こうも感じました。

「ランキングって、大して難しくなさそうな機能だと思っていたのに、意外とムズイ

たかがランキング、されどランキング。
ログイン処理、ランキングスコアの送信・受信処理、非同期処理、通信中のUIの表示など、実はランキング機能の実装のためには、作らないといけないもの、理解しないといけない要素が沢山あります。

パッケージを入れたらすぐにランキング機能が実装出来る、そんな楽ちんなライブラリがあったら、ラクだろうなと思い、だれでも簡単にランキング機能が実装出来る、「PlayFabRankingTools」をMITライセンスで配布することにしました。

デモ

unityroom
PlayFabRankingToolsDemo 2025/9/19 Ver2.0版に更新 Ver1台のサポートは終了しました。

リンク

を確認ください。

PlayFabRankingToolsの特徴

出来ること

ビルドターゲット

・WebGL
・iOS
・Android
・Windows/Mac

ログイン関連

・匿名ログイン(ユーザ名、パスワード不要のログイン)
・ユーザ名の設定、変更

ランキング関連

・ランキングスコア(int型)送信
・自分のランキングデータ(順位、ユーザー名、スコア)の取得
・TOP〇〇位までのランキングデータの取得
・自分の順位の前後〇〇位までのランキングデータの取得
・複数のランキングを使い分ける

開発効率化ツール

・ダミー用ユーザデータの作成とスコアの更新
・ログイン状況のエディタ上での監視

UI

・サーバー通信中に、通信中である旨のUIの表示
・通信失敗時のUI表示
・ランキングのUIテンプレート

出来ないこと

・別サービス(GoogleやFaceBookアカウントなど)と連携した認証
・アカウントの引き継ぎ
・int型以外のスコアを扱う

導入方法

対応バージョン

Unity2021以降

前提ライブラリのインストール

以下のライブラリを前提としています。事前に以下のパッケージをインストールしてください。
具体的な方法も以下に記載しています。

① UniTask
② PlayFab SDK

①UniTask

パッケージマネージャーから、「GIT URLからパッケージ追加」を行います。

https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask

入力したら、あとはEnterするだけです。暫く待つとインストールが完了します。(スペースなどが入っているとエラーになるので注意!)

②PlayFab SDK

次に、PlayFabをUnityで使えるようにするためのSDKを導入します。
手順としては

Unity 用 PlayFab SDK のインストール - PlayFab | Microsoft Learn

に記載されている、パッケージダウンロード用のリンクをクリックしてパッケージをダウンロード。

ダウンロードできたパッケージを、それぞれUnityのプロジェクトにドラッグアンドドロップで取り込みます。

これで一旦前準備は完了です。

2025年9月追記:PlayFab Editor Extensionのインストールは非推奨に変更

2025年の3月頃から、PlayFabのログインに、MicroSoftアカウントが無いとログイン出来なくなりました。MicroSoftアカウント以外でこれまでログインしていた場合はアカウントを切り替える必要があります。

ですが、MicroSoftアカウントで、PlayFabEditorExtensionsを使ったログインが出来ない報告が多数あるようです。
そのため、PlayFab Editor Extension のインストールは非推奨とします。

PlayFabの基本設定方法

次に、PlayFab側の基本設定をしていきます。

【PlayFab】PlayFabのアカウント作成

https://developer.playfab.com/ja-jp/sign-up

から、アカウントを作成します。Microsoftアカウントがすでにあれば、同じアカウントを使用出来ます。

【PlayFab】ゲームタイトルの設定

アカウントを作成し、ログインが出来たら、スタジオ名を設定する画面が出ます。後から変更出来るので適当に設定ください。

ゲームスタジオ欄の右側の3点リーダをクリックすると新しいタイトルを作成出来ます。タイトルは基本的に1ゲームに対して1つ設定します。

タイトルを新規作成する場合は、名前を設定しましょう。名前空間は新規タイトルであれば「Create New」で問題ありません。

作成したタイトルが、以下のように表示されていれば、OKです。
タイトルの右下にあるIDが、このゲームで使用する一意のIDとなります。後ほどこのIDをUnity側で使用します。

【PlayFab】ランキングの設定

次に、ランキングデータをやりとりが出来るようにするための設定をしていきます。
まずは作成したゲームタイトルを選択してください。

最初にダッシュボードが表示されると思います。これが、PlayFabの管理画面です。
現在のユーザ数などを確認することが出来ます。

ダッシュボードからユーザ数を確認出来る

さっそく、ランキングの設定をしていきます。

APIの許可設定を行う

デフォルトのPlayFabの設定では、各端末からPlayFabにランキングデータを送信する機能が無効化されています。
まずはこれをONにします。

STEP
左のメニューの「設定(Settings)」を選択
STEP
「APIFeatures(API機能)」を選択
STEP
「Allow client to post players statistics(クライアントにプレイヤー統計情報のポストを許可する)」をアクティブに設定

これを設定すると各プレイヤーがスコアを送信出来るようになります。

STEP
「Disable player creation using Client/LoginWithCustomId」をOFFに設定

このチェックを外すことで、Unity側から新規ユーザ作成用のIDを発行することができます。

STEP
設定を保存する

下部にある「Save」ボタンから、設定を保存します

【PlayFab】ランキングの設定を行う

次にランキングの設定を行います。

STEP
左のメニューから「Progression」を選択
STEP
Leaderboards(Legacy)を選択


Legacyが付いていない方から作成すると、複数カラム(例えば、得点とアシスト数)を持ったランキングを作れます。
ただ、普通のランキングでよければ、Legacyの方で良いと思います。

STEP
ランキングの設定

ランキング名や、ランキングの更新頻度、ランキングの更新方法を設定します。
ここの設定項目は全部重要です。稼働してから修正するのが難しいのでしっかりとチェックします。

「Aggregation method(集計方法)」は、デフォルトの「Last」の場合、プレイする度にハイスコアが変わってしまいます。
以下の表を見て、適切なものに設定しましょう。

また、ここで設定したStatistic nameはUnity側で使うので控えておきます。
本パッケージのデフォルトのStatistic nameは、「HighScore」となっています。

エンティティタイプ(Entitty Type)って何?
title_player_acount : PlayFab 内のプレイヤー内でのランキング、基本はこれ
group : プレイヤーの所属するグループごとのランキング。ギルドランキングなどで使う
external : PlayFab 内のデータに紐づかない数値のランキング、外部サービスと連携している場合などで。
master_player_account : 複数のタイトル間でのランキング。ゲームを跨いだランキングを競うなど。

また、PlayFabでは、ランキングのスコアの値は、int型(整数型)しかサポートされていません。
タイムアタックなどで小数点を使用したい場合は、大きめな整数の値をランキングデータにして、Unity側で小数点に変換するなどの工夫が必要です。

【Unity】(Unity側)PlayFabのタイトルとUnityの紐づけ設定

次に、Unity側と先ほど作ったPlayFabのタイトルとUnityの紐づけを行います。
Unityで以下のファイルを選択します。

Assets > PlayFabSDK > Shared > Public > Resources > PlayFabSharedSettings

インスペクタの、「TitleID」に、PlayFabの管理画面に記載のあるIDを入力します。

これで紐づけ準備は完了です!

【Ver2.00-】PlayFabRankingToolsの導入方法

★Ver2.00以前の古いバージョンを使用している場合はこちらを参照ください。

PlayFabRankingToolsのインストール方法

前置きが大分長くなりましたが、ようやく本パッケージのインストールです。


こちらのショップから「YRC_PlayFabRankingTools」をダウンロードしてください。
ダウンロードしたらZIPファイルを解凍して、
Unity内にドラッグアンドドロップするだけです。

unitypackageをUnityのプロジェクトウィンドウにドラッグアンドドロップ

PlayFabRankingToolsの使い方

想定している使い方

  • ゲーム開始時、タイトル画面などで、ユーザにランキングに登録するユーザ名を登録してもらう
  • ゲームクリア時にスコアを送信し、リザルト画面で自分のランキング順位と、TOPランキングを表示する

デモ

説明を聞くより、実物を見たほうが早い!という方は、以下のパスのシーンを参照ください。

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Demo > DemoRankingScene

ランキングの表示

以下の4ステップで完了します、スムーズに進めば15分も掛かりません。

Step1:シーン内に「YRC_PlayFabManager」を配置
Step2:「PlayFabRankingService」クラスにPlayFabで設定したランキング名の設定
Step3:スコア送信処理の実装
Step4:ランキングUIの表示処理の実装

例えば、ゲームクリア時やゲームオーバーの時などに、スコア送信 を行い、リザルト画面などの演出が終わったタイミングなどでランキングUIの表示を行ってください。

STEP
シーン内に「YRC_PlayFabManager」を配置

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Prefabs

にある、「YRC_PlayFabManager」Prefabをシーン内に配置します。

STEP
「PlayFabRankingService」クラスにPlayFabで設定したランキング名の設定

「YRC_PlayFabManager」の配下にある、「PlayFabRankingService」にStatisticNameという項目がインスペクタにいます。
この値を、PlayFabの管理画面で設定したRanking名と同じものにします。

STEP
スコア送信処理の実装

スコアを送信したいタイミングで以下のようにメソッドを呼び出してください。

using YuRinChiLibrary.PlayFab; // 冒頭につける
using Cysharp.Threading.Tasks;


    public async UniTask SendScore()
    {
        bool success = await PlayFabManager.Instance.SubmitMyScore(sampleScoreCounter.Score, statisticName);
    }

playerScoreには、送信したいint型(整数)のスコアの値を入れてください。
statisticsNameには、PlayFabで設定したランキングの名前("HighScore"などをセットします。

また、bool型で「スコアの送信に成功したかどうか」の戻り値を返します。そのため、以下のように実行結果に応じたエラーハンドリング可能です。
本アセットではデフォルトで、通信エラー時にはエラー用のUIを表示する仕様になっています。
以下エラーハンドリングを行ったサンプルです。

    public async UniTask SendScore()
    {
        bool success = await PlayFabManager.Instance.SubmitMyScore(sampleScoreCounter.Score, statisticName);

        if (success)
        {
            Debug.Log("スコア送信が完了しました");
        }
        else
        {
            Debug.LogError("スコア送信に失敗");
        }

    }
STEP
ランキングUIの表示処理の実装

ランキングを表示したいタイミングで以下のコードを1行書いてください。
スコア送信後、ランキングへの反映には数秒程度のラグがあります。そのため、スコア送信後、即座にランキングUIを表示しようとすると、ランキング表示が更新されないことがあるのでご注意ください。
スコア送信後、演出を挟んだりしてからランキングを表示したりするのが良いかと思います。

using YuRinChiLibrary.PlayFab; // 冒頭につける

    public async UniTask ShowRanking()
    {
        await PlayFabManager.Instance.ShowRankingCanvas(statisticName);
    }

statisticsNameには、PlayFabで設定したランキングの名前("HighScore"などをセットします。

コードの書き方が分からない場合、以下のフォルダ内のスクリプトをコピーして使ってください。

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Scripts > DemoScripts > SampleSubmitScoreAndShowResult

ランキング登録ユーザ名の登録

ランキングに表示されるユーザ名を設定するUIを表示することが可能です。
ボタンなどから以下のようにメソッドを呼び出してください。

using YuRinChiLibrary.PlayFab; // 冒頭につける

PlayFabManager.Instance.ShowUserNameRegistrationCanvas();

以下のようなUIが立ち上がったらOKです。

デフォルトの設定は以下のとおりです。

・ユーザ名の文字数制限:3-8文字(範囲内の文字数でないとFIXボタンを押せない)
・PlayFabに同じユーザ名が存在している場合、エラーが表示される

ユーザ名が重複している場合

テスト用のダミーユーザやダミーデータの作成

ランキングが正しく表示されているかを検証するためのデバッグツールを用意しました。

画面上部のDummyDataCreatorを選択します。

DummyIDやUserNameなどを設定して、「CreateUser」ボタンを押すと、ユーザが作成されます。
「SubmitScore」ボタンを押すとスコアが送信されます。

スコア送信はユーザが作成されていないと失敗します。

また、PlayMode中でないと、これらのボタンは機能しません。

通信エラー時の対応

サーバとの接続が発生するゲームを作る上で避けて通れないのがエラーハンドリングです。
端末側の回線が落ちていたり、サーバ側が落ちていることを検知して、ユーザに表示する必要があります。

当アセットでは、通信エラーを検知した場合、以下のようなエラーパネルを共通で表示する仕様です。

通信エラーが発生した後にユーザにどのようなアクションをさせるかは、各ゲームによって異なると思いますので、このアセットでは特に定義はしていません。

「タイトル画面まで戻させる」、「シーンを再読み込みする」あたりが主流な気がします。
ポケポケなども、通信エラー時はタイトルに戻させています。

機能の補足

ユーザ名の入力文字数制限を変更したい

UserNameRegisterCanvasにアタッチされている、「NameInputFieldController」のフィールドの値を変更すると設定が可能です。

UIの見た目を変えたい

以下のパスにあるUIのPrefabを変更して、見た目を自由にセットください。

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Prefabs > UI

任意のタイミングでPlayFabログインをさせたい

本アセットでは、デフォルトでは、Startの処理でログインを呼び出していますが、任意のタイミングでのログインとしたい場合は、

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > YRCPlayFabRankingToolSettings

を選択し、LoginOnStar のチェックを外してください。

ログインの処理は以下のコードで呼び出せます。

    public async UniTask Login()
    {
        await PlayFabManager.Instance.StartLogin();

        if (success)
        {
            Debug.Log("ログインに成功");
        }
        else
        {
            Debug.LogError("ログインに失敗");
        }

    }

ログの表示レベルを変更したい

当アセットのログレベルを設定できます。

ライセンス

The MIT License (MIT)

Copyright (c) 2024-2025 Yu-Rin-Chi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

FAQ

「現在のコンテキストに 'PlayFabManager' という名前は存在しません」 というエラーが出る

以下のコードをスクリプトの冒頭に追加してください。

using YuRinChiLibrary.PlayFab;

同率のスコアの場合、順位はどうなるの?

ちょっと残念なのですが、同点のスコアの場合、順位は取得のたびに変わる可能性があります。
詳しくは下記のPlayFab公式のサポートページを御覧ください。

一応、PlayFab側では改修見込みとのことらしいです。

ログインユーザIDはどこに保存されているの?

ユーザIDは、PlayerPrefsに保存されています。
デフォルトでは、ユーザIDは、UUIDという重複しないランダムな文字列のIDを発行し、各端末に保存する仕様です。

そのため端末ごとに違うユーザになります。

日本語で入れた文字が全部 □□ で表示されるんだが

Unity標準のTextMeshProだと日本語に対応していません。
日本語を表示しようとすると、そんなフォントはない!ということで、□□で表示されます。

日本語を含めたフォントで表示したい場合は、こちらの記事に記載のとおり、日本語用のTextMeshProを作成して、各種UIのオブジェクトにフォントを割り当てください。

WebGLビルドすると日本語の入力が出来ない

Unity標準ではWebGLビルド時に日本語入力が出来ません💩
WebGLビルドで日本語入力に対応するには、以下の関連記事で方法を紹介しているので、ご確認ください。

ユーザ名にNGワードを入れられないようにしたい

公序良俗に反するワードを入れてはいけない制御を入れる場合、こちらのアセットを入れるなどすると簡単に導入出来るみたいです。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ゲーム制作の敷居を下げ、もっと多くの人にゲーム作りを楽しんでもらうために、ゲームをカンタンに作る方法を”網羅的に”解説しています。
よかったらブックマークお願いします。
Twitter(X)もよければフォローお願いします。

コメント

コメント一覧 (1件)

  • 無事ランキングを実装できました、ありがとうございます。
    ランキングを開いてからスコアを登録するか決める、みたいな動きを想定していたのですが、
    スコアを先に登録してからユーザー名を登録する、という動作だったのが予想外でした

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次