Unityで作ったアプリにニフクラ mobile backendを使って無料でランキング機能を追加する方法を紹介します👌 コピペで実装できるので初心者の方でも簡単に実装できます👫
はじめに
こんにちは。mobile backend企画担当の伊藤です。
今回はUnity SDKを利用してランキング機能を実装する方法を解説していきます。
Unity SDKのドキュメントはこちらです👀
ドキュメント : 開発者向けドキュメント | ニフクラ mobile backend
ニフクラ mobile backendのサービスの概要はこちらをご参照ください👀
mobile backendをUnityアプリと連携させる手順
ニフクラ mobile backendのクイックスタートで画像を用いながらわかりやすく説明しているので 是非以下を参考に連携させてみてください😃✨
▼イメージ
イントロダクション (Unity) : クイックスタート | ニフクラ mobile backend
ランキング機能
ランキング機能を実装するためには
- データストア(DB)にユーザー名とスコアを保存
- データストアに保存されているデータをスコア降順で5件取得
- ユーザーネームとスコアを画面表示
という順番で実装していきます。
このアプリは、ログイン中のユーザー(カレントユーザー)を認識してゲームで遊んでいるため、ユーザーはログインしている必要があります。
Unityで作ったアプリにログイン機能を追加する方法は別途ブログで公開していますので
まだ実装されていない方はそちらからご覧ください👩💻👨💻
データストア(DB)にユーザー名とスコアを保存
私は今回ブロック崩しゲームにランキング機能を付けました。 定義は以下です。
- ブロックが1個ボールに当たるごとに点数が+100点
- 成功しても失敗しても「data」クラスにスコアとユーザーネームが保存される
データストアにデータ(ユーザーネームとスコア)を保存する場合のコードは以下です。
(★の部分が今回ニフクラ mobile backendのコードです。他の箇所はゲームの処理です。)
using System; using UnityEngine; using NCMB; public class Ball : MonoBehaviour { Rigidbody rigid; GameManager manager; public string currentUserName; [SerializeField] int speed = default; //スコアは0からスタート int score = 0; // ★クラスのNCMBObject(data)を作成 NCMBObject data = new NCMBObject("data"); void Start() { //ゲームの中身 } void OnCollisionEnter(Collision collision) { // ボールの移動速度を一定にする処理など // ボールがブロックに衝突した場合 if (collision.gameObject.name.StartsWith("Block", StringComparison.Ordinal)) { // ブロックを削除 Destroy(collision.gameObject); GameManager.Instance.BlockCount--; //点数を追加 score += 100; } // クリアした場合 if (manager.IsClear()){ manager.EndGame("Game Clear!"); // ★カレントユーザーの確認 NCMBUser currentUser = NCMBUser.CurrentUser; if (currentUser != null) { UnityEngine.Debug.Log ("ログイン中のユーザー: " + currentUser.UserName); } else { UnityEngine.Debug.Log ("未ログインまたは取得に失敗"); } // ★UserNameとscoreを「data」クラスに保存する data["score"] = score; data["UserName"] = currentUser.UserName; // ★データストア(「data」クラス)への登録 data.SaveAsync(); return; } // ゲームオーバーの場合も同じ if (manager.IsGameOver()){ //失敗した際の処理を書く //★ニフクラ mobile backendの処理は上と同じ } } }
ニフクラ mobile backendのデータストア(「data」クラス)にも保存されていることを確認できました💮
(画像をクリックすると拡大して表示されます🧐)
データストアに保存されているデータをスコア降順で5件取得して表示させる
- データストアに保存されているデータをスコア降順で5件取得
- ユーザーネームとスコアを画面表示
は1ファイルにまとめて書いています。
using System.Collections; using System.Collections.Generic; using UnityEngine; using NCMB; using System.Linq; using UnityEngine.UI; public class RankingHyoji : MonoBehaviour { public Text targetText; void Start () { //順位のカウント int count = 0; string tempScore = ""; //★ データストアの「data」クラスから検索 NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("data"); //★Scoreフィールドの降順でデータを取得 query.OrderByDescending ("score"); //★検索件数を5件に設定 query.Limit = 5; query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => { if (e != null) { UnityEngine.Debug.Log ("ランキング取得失敗"); } else { //検索成功時の処理 UnityEngine.Debug.Log ("ランキング取得成功"); // 値とインデックスのペアをループ処理 foreach (NCMBObject obj in objList) { count++; //★ユーザーネームとスコアを画面表示 tempScore += count.ToString() + "位:" + ":ユーザーネーム:" + obj ["UserName"] + ":スコア:" + obj ["score"] + "\r\n"; } targetText.GetComponent<Text>().text = tempScore; } }); } }
最後に
以上で、ランキング機能が追加できました!
不明点があればユーザーコミュニティ*1へ質問してみてください! github.com