はじめに
今回はNCMBを使ってゲームにランキングを実装してみる記事になります!
もしランキングの実装を実装しようと思ったら、自分でサーバーを立てる事が一般的だと思います。
しかしNCMBというmBaaS
というサービスを用いることで、自身でサーバーを立てたりすることなく非常に簡単にランキングなどを実装することができます。
では早速みていきましょう。
データを登録する
データストアにデータを登録するサンプルを作ってみました。
using System.Collections.Generic; using UnityEngine; using NCMB; public class DBManager : MonoBehaviour { public void Save(string key, int value) { //データストアにスコアクラスを定義 NCMBObject test = new NCMBObject("Score"); //データストアに登録したい値を設定 test[key] = value; //サーバーに書き込む test.SaveAsync((NCMBException e) => { if(e != null) { Debug.LogWarning("保存に失敗: " + e.ErrorMessage); } else { Debug.Log("保存に成功"); } }); } }
NCMBを使ったデータの登録はNCMBObject
というクラスのインスタンスをまず作る必要があります。
また今回はSaveAsync
というメソッドを用いていますが、これは非同期で処理を行います。
これに対してSave
というメソッドがありますが、こちらは同期処理です。
状況に応じて使い分けることができますが、基本は非同期処理で良いと思います。
データを取得する
上のサンプルに対応したデータを取得するスクリプトを書いてみました。
using System.Collections.Generic; using UnityEngine; using NCMB; using System.Linq; public class DBManager : MonoBehaviour { public void Save(string key, int value) { //データストアにスコアクラスを定義 NCMBObject test = new NCMBObject("Score"); //データストアに登録したい値を設定 test[key] = value; //サーバーに書き込む test.SaveAsync((NCMBException e) => { if(e != null) { Debug.LogWarning("保存に失敗: " + e.ErrorMessage); } else { Debug.Log("保存に成功"); } }); } public void Load(string key) { //データストアの"Score"クラスから検索 NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("Score"); //"Score"クラスのkeyカラムを降順に並び替え 例)3,2,1 query.OrderByDescending(key); //実際に取得する query.FindAsync((List<NCMBObject> objList, NCMBException e) => { if(e != null) { Debug.LogWarning("取得に失敗: " + e.ErrorMessage); } else { var scores = objList.Select(o => System.Convert.ToInt32(o[key])); foreach(var item in scores) { Debug.Log(key + ": " + item); } } }); } }
Save
と同じkey
を持つデータを全て取得して、ログに表示するスクリプトを追加してみました。
まずデータを取得するためにはNCMBQuery<NCMB>
のインスタンスを作成する必要があります。
これはざっくりというとデータベースから取得するときに条件を付けるものです。ランキングの上位5位みたいなものですね。
データを取得するメソッドはFindAsync
とFind
の2種類ありますが、先程同様それぞれ非同期処理と同期処理の違いです。
基本は非同期処理でいいでしょう。
さいごに
これを実際に実行してみるとちゃんと動作しました。
次はファイルストアや認証機能なんかも面白そうなので、触ってみたいと思います。