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

目次

ダウンロード方法

以下からダウンロード出来ます。
導入方法をちゃんと読まずに進めるとエラーが出るので、読んでからインストールくださいね。

あわせて読みたい
【Unity】ランキング機能を超お手軽実装!PlayFabRankingTools - Yu-Rin-Chiのゲ制工房 - BOOTH PlayFabを使ったランキング機能を、初心者でも簡単に実装が出来るライブラリです。 数行のコードで、ランキング機能を実装出来ます。

バージョン・変更履歴

バージョン・変更履歴

2024/11/9
[V1.0.0] 初版リリース

PlayFabRankingToolsとは

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

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

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

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

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

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

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

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

デモ

このリンクからWebGLのサンプルを試せます。

PlayFabRankingToolsの特徴

出来ること

ビルドターゲット

・WebGL
・iOS
・Android

ログイン関連

・匿名ログイン(認証不要のログイン)
・ユーザ名の設定、変更

ランキング関連

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

開発効率化ツール

・ダミー用ユーザデータの作成とスコアの更新

全般

・サーバー通信中に、通信中である旨のUIの表示

出来ないこと

・上記に書いていないこと
・日本語(ひらがな、カタカナ、漢字など)でユーザ名を設定する(FAQを読めば設定出来ます)
・別サービス(GoogleやFaceBookアカウントなど)と連携した認証
・int型以外のスコアを扱う

更新履歴

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

導入方法

対応バージョン

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

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

ダウンロードできたパッケージを、それぞれ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】API経由でユーザの作成を許可する

デフォルトの設定で、Unity側からPlayerの新規作成APIを呼び出せない設定が入っていることがあるようです。
「Disable 」

【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】PlayFabのタイトルとUnityの紐づけ設定

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

Assets > PlayFabSDK > Shared > Public > Resources > PlayFabSharedSettings

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

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

PlayFabRankingToolsの導入方法

ここまではPlayFabの基本的なインストールでした。
ここからが、当アセットを使った設定の解説になります。

PlayFabRankingToolsのインストールする

前置きが大分長くなりましたが、ようやく本パッケージのインストールをしてください。
こちらのサイトから「YRC_PlayFabRankingTools」というファイルをダウンロードし、Unity内にドラッグアンドドロップするだけです。

PlayFabRankingToolsの使い方

導入方法を2つ用意しました。

【クイック実装】:とにかく時短で実装したい人 / 初心者向け
【個別実装】:自分組み立てて実装したい人 / 中級者以上向け

【クイック実装】ランキングデータの送信とランキングの表示

とにかく簡単にランキング機能を実装したい人向け。

想定している使い方

ゲームクリア時にスコアを送信し、リザルト画面で自分のランキング順位と、TOPランキングを表示する

実装方法

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

Step1:「YRC_PlayFabManager」を配置
Step2:PlayFabで設定したランキング名の設定
Step3:ビルド設定にランキング用シーンを追加
Step4:スコア送信処理の実装
Step5:ランキングシーンの表示

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

「YRC_PlayFabManager」を配置

以下のパスにあるPrefabをシーン内に配置してください。

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Prefabs

②PlayFabで設定したランキング名の設定

Prefabの子オブジェクトにいる、PlayFabRankingServiceのStatisticNameをPlayFabの管理画面で設定したランキングの名前にセットしてください。

このスクショの例だと、PlayFabで設定したランキングの名前が「HighScore」

③ビルド設定にランキング用シーンを追加

エディタ上部のウィンドウの「ファイル」 > 「ビルドプロファイル」を選択し、

ビルド対象のシーンに、「AdditiveRankingScene」を追加ください。

Unity6でのシーンリスト編集画面

④スコア送信

冒頭に以下のコードを記述してください。

using YuRinChiLibrary.PlayFab;

スコアを送信したいタイミングで、以下のように記述したメソッドを実行してください。

await PlayFabManager.Instance.SubmitMyScore(playerScore, statisticName);

UniTaskを使った非同期処理のため、呼び出すメソッドにasync/awaitを付ける必要があります。
UniTaskやTaskに慣れてなければ、以下のサンプルのコードをコピペください。

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

また、bool型で「スコアの送信に成功したかどうか」の戻り値を返します。そのため、以下のように実行結果に応じたエラーハンドリング可能です。以下サンプルです。

    private async UniTask SubmitScoreAsync()
    {
        // 通信開始前の処理をココに書く

        try
        {
            bool success = await PlayFabManager.Instance.SubmitMyScore(playerScore, statisticName);

            // 通信後の処理をココに書く
            if (success)
                Debug.Log("スコア送信成功");
            else
                Debug.Log("スコア送信失敗");
        }
        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"スコア送信中の例外エラー: {ex.Message}");
        }
    }

⑤ランキングの表示

ランキング用のビューを表示するには、以下のコードを1行記述するだけです。

PlayFabManager.Instance.LoadRankingScene(statisticsName);

statisticsNameには、PlayFabで設定したランキングの名前(string型)をセットします。
この処理を行うとランキング用のシーンが読み込まれます。ランキングデータを取得している最中は以下の画像のように通信中状態となり、

通信が終わるとこのように結果が表示されます。

デフォルトでは、ユーザ名が「nanashi」となっています。

InputFieldから名前を入力することで、ユーザー名を変更出来ます。
デフォルトの名前は「MyRankingData」というPrefabから設定が出来ます。

また、ユーザ名の登録には以下の制御が入っています。

・3文字以上10文字以下
・スペースの入力不可

また、ネットワークエラーなどで接続が出来なかった場合、以下のように接続に失敗した旨の画面が表示されます。

表示されるUIは自由にカスタムが可能ですので、以下のパスにあるシーンを編集してください。

PlayFabRankingTools > Scene > AdditiveRankingScene

注意事項1:日本語入力の対応

本アセットではTextMeshPro を使っていますが、Unity標準のフォントを使っているため、日本語入力に対応していません。
日本語入力を行いたい場合は以下のFAQを確認ください。
日本語で入れた文字が全部 □□ で表示されるんだが
WebGLビルド時に日本語が入力出来ない

【個別実装】PlayFab・ランキングに関する各種処理の呼び出し方法

自分でカスタムして実装したいのだが

自分の好きなタイミングで、ランキングやログインに関する処理を呼び出す実装をしたい人向けの解説です。
中級者向けとは書きましたが、ちゃんと読めば初心者でも実装出来るとは思います。

実装する場合、基本的にシングルトンインスタンスのPlayFabManagerを通じて非同期の処理を呼び出します。

通常の書き方と違う点は、メソッドの宣言時に async UniTask を付けるのと、awaitを付けてメソッドを呼び出す、という2点だけです。
※ボタンなどのイベントリスナーに紐づける場合は、async voidにしてください。

実際のコードを見るのが一番早いと思うので、呼び出し方のサンプルをPlayFabRankingTools > Scripts > Sampleにある、「SamplePlayFabToolsFunctions.cs」というスクリプトにまとめました。
分からなくなったら、一旦「SamplePlayFabToolsFunctions.cs」の書き方をコピーしちゃうのがよいです。

PlayFabRankingTools > Scene > PlayFabRankingToolsFuncitionsを開くと、「SamplePlayFabToolsFunctions.cs」のメソッドの実際の動きを確認出来ます。

冒頭に以下のコードを記述してください。

using YuRinChiLibrary.PlayFab;

ログイン処理

以下のコードで呼び出すことが出来ます。

await PlayFabManager.Instance.StartLogin();

bool型で「ログインに成功したかどうか」の戻り値を返します。そのため、以下のようにログイン成功時に応じた分岐が可能です。
以下、サンプルのログインです。

    private async UniTask StartLogInAsync()
    {
        // 通信開始前の処理をココに書く
        try
        {
            bool success = await PlayFabManager.Instance.StartLogin();

            // 通信完了後の処理をココから下に書く
            if (success)
            {
                Debug.Log("ログインに成功");
            }
            else
            {
                Debug.Log("ログインに失敗");
            }
        }
        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"ログイン中の例外エラー: {ex.Message}");
        }
    }

ユーザ名の変更処理

以下のコードで呼び出すことが出来ます。

await PlayFabManager.Instance.UpdateUserName(userName);

userNameには、変更したいユーザの名前(string型)をセットします。
bool型の「ユーザー名の変更に成功したかどうか」の戻り値を返します。以下はサンプルのコードです。

    private async UniTask UpdateUserNameAsync()
    {
        // 通信開始前の処理をココに書く

        try
        {
            bool success = await PlayFabManager.Instance.UpdateUserName("namaedayo");

            // 通信完了後の処理をココから下に書く
            if (success)
            {
                Debug.Log("ユーザー名の変更に成功");
            }
            else
            {
                Debug.Log("ユーザー名の変更に失敗");
            }
        }
        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"ユーザ名変更中の例外エラー: {ex.Message}");
        }
    }

スコア送信処理

こちらを参照ください。

自分のランキングデータの取得処理

以下のコードで呼び出すことが出来ます。

await PlayFabManager.Instance.GetMyRankingData(statisticName);

statisticNameには、PlayFabで設定したランキングの名前(string型)をセットします。
bool型の「自分のランキングデータの取得に成功したかどうか」の戻り値を返します。

そのため、取得の結果に応じた分岐も可能です。以下はサンプルのコードです。

    private async UniTask GetMyRankAsync()
    {
        // 通信開始前の処理をココに書く

        try
        {
            bool success = await PlayFabManager.Instance.GetMyRankingData(statisticName);

            // 通信完了後の処理をココから下に書く
            if (success)
            {
                Debug.Log("自分のランキングデータの取得に成功");
            }
            else
            {
                Debug.Log("自分のランキングデータの取得に失敗");
            }

        }
        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"自分のランキングデータ取得中の例外エラー: {ex.Message}");
        }
    }

取得した自分のランキングデータは、PlayFabRankingService内のMyRankingEntriesに格納されているので、UIに表示するなどしてご自由にお使いください。

TOPランキングデータの取得処理

以下のコードを使用します。

await PlayFabManager.Instance.GetTopRankingData(statisticName);

statisticNameには、PlayFabで設定したランキングの名前(string型)をセットします。
bool型の「TOPランキングデータの取得に成功したかどうか」の戻り値を返します。

そのため、取得の結果に応じた分岐も可能です。以下はサンプルのコードです。

    private async UniTask GetTopRankAsync()
    {
        // 通信開始前の処理をココに書く

        try
        {
            bool success = await PlayFabManager.Instance.GetTopRankingData(statisticName);

            // 通信後の処理をココから下に書く
            if (success)
            {
                Debug.Log("TOPランキングデータの取得に成功");
            }
            else
            {
                Debug.Log("TOPランキングデータの取得に失敗");
            }
        }

        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"TOPランキングデータ取得中の例外エラー: {ex.Message}");
        }
    }

取得した自分のランキングデータは、PlayFabRankingService内のTopRankingEntriesに格納されているので、UIに表示するなどしてご自由にお使いください。

また、PlayFabRankingService内のFromTopDataVolumeの値を変更することで、上位何人までのデータを取得するかを設定出来ます。

自分の順位の周辺ランキングデータの取得処理

以下のコードを使用します。

await PlayFabManager.Instance.GetAroundMeRankingData(statisticName);

statisticNameには、PlayFabで設定したランキングの名前(string型)をセットします。
bool型の「自分の順位の周辺ランキングデータの取得に成功したかどうか」の戻り値を返します。

そのため、取得の結果に応じた分岐も可能です。以下はサンプルのコードです。

    private async UniTask GetAroundMeRankAsync()
    {
        // 通信開始前の処理をココに書く

        try
        {
            bool success = await PlayFabManager.Instance.GetAroundMeRankingData(statisticName);

            // 通信後の処理をココから下に書く
            if (success)
            {
                Debug.Log("自分周辺のランキングデータの取得に成功");
            }
            else
            {
                Debug.Log("自分周辺のランキングデータの取得に失敗");
            }
        }

        catch (Exception ex)
        {
            // 例外処理をココに書く
            Debug.LogError($"自分周辺のランキングデータ取得中の例外エラー: {ex.Message}");
        }
    }

取得した自分のランキングデータは、PlayFabRankingService内のAroundMeRankingEntriesに格納されているので、UIに表示するなどしてご自由にお使いください。

また、PlayFabRankingService内のAroundMeDataVolumeの値を変更することで、自分の周囲の何人までのデータを取得するかを設定出来ます。

設定項目

以下のパスのファイルを編集すると設定を変更出来ます。

Assets > Yu-Rin-ChiLibrary > PlayFabRankingTools > Settings > YRCPlayFabSettings

ログの表示レベルを変更

Prefabの、「YRC_PlayFabManager」のPlayFabManagerからログのレベルを変更出来ます。

  • None:ログを表示しない
  • Error:エラーログのみを表示
  • Warning:ワーニング・エラーログのみを表示
  • Info:すべてのログを表示

指定したタイミングでログイン処理を行う

デフォルトでは、Startの処理で、ユーザログイン処理を行うようになっていますが、開発者が指定した任意のタイミングでログイン処理を行う場合は、LoginOnStartのフラグをfalseにしてください。

開発効率化用のツール

ダミーユーザーを作成する

[Debug]CreateDummyUser」というオブジェクトのインスペクタウィンドウから、ダミーユーザの作成とスコアの送信が可能です。

Playモード中に、インスペクタウィンドウを見ると、ボタンが表示されます。

ボタンを押すことで、インスペクタに登録しているデータで、ダミーのユーザデータを登録することが出来ます。

  • Create Dummy User and Submit Score :DummyIDで新規ユーザの作成
  • Submit Score:DummyIDに紐づくユーザのスコアの更新

即座には反映されませんが、長くとも1-2分ほど経てば、PlayFabの管理画面上で、以下のようにユーザが追加されたことを確認出来ます。

ライセンス

The MIT License (MIT)

Copyright (c) 2024 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公式のサポートページを御覧ください。

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

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

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

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

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

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

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

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

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

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

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

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

この記事を書いた人

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

コメント

コメント一覧 (1件)

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

コメントする


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

目次