Unity&NCMBでデータを保存、取得する方法
まずは準備します
1.保存できるデータの種類
データストアで利用可能なデータ型
種類 サンプル 文字列 ABC 配列 ["orange", "apple", "grape"] 数字 123 日付 2013-09-06T01:51:03.606Z 真偽値 true または false オブジェクト {"name":"orange"} または null 緯度経度(位置情報) 33.857619,122.378986
今回は文字列を保存して共有します。
APIリクエスト(保存する通信で一回,、取得する通信で一回、という計算で無料だと100万回まで)の制限があることに注意。
2.データを保存する方法
1.NCMBObject obj = new NCMBObject("HighScore");で宣言。
2.obj["Name"] = "hoge";でobjにNameというkeyで"hoge"という文字列を入れておく。
obj.SaveAsync((NCMBException e) => { if (e != null) {
//エラー処理
} else {
//成功時の処理
}
};
で保存。
3.データを取得する方法
保存したデータはNCMBにログインすればこんな感じで確認できます。
ここからデータを取得します。
データを取得する方法は二つあります。(この二つしかない。)
・objectIdをもとに、データを取得する
・クエリを作成してオブジェクトを検索する
objectIdで取得する方法
objectIdは保存した時に自動で割り当てられる。指定はできないみたいなので保存時に取得しておいて取得時に使用する。正直使いづらいかな。
NCMBObject obj = new NCMBObject("Score"); obj["score"] = score; //ゲームのスコア string selfID; obj.SaveAsync((NCMBException e) => { if (e != null) { //エラー処理 } else { //成功時の処理 selfID = obj.ObjectId; } });
みたいな感じで保存した時に取得していておいて、
NCMBObject obj = new NCMBObject ("Score"); obj.ObjectId = selfID; obj.FetchAsync ((NCMBException e) => { if (e != null) { //エラー処理 } else { //成功時の処理 obj["Score"] = newScore;//新しいスコア } });
データ取得の時にNCMBオブジェクトに当てはめて取得する。
queryで取得する方法
queryという検索機能を使います。queryにさまざまな検索方法が用意されている。下例
//Scoreの値が7と一致するオブジェクト検索 query.WhereEqualTo ("Score", 7);
//取得件数の指定 query.Limit = 5;
//取得開始位置の指定 query.Skip = 6;
// 昇順 query.OrderByAscending ("Score");
上例では”Score”というKeyで中身がintという程で検索するものが多いように、queryは基本的にはkeyのvalueになっている整数で検索するようだ。
objectIDを設定して、objectIDで検索するという方法はないみたい。またvalueの文字列を元に検索という方法もなかったため注意が必要。
自分は今回作成した3Dモデルの名前となる文字列で検索をかけたかったができないということが発生した。
1.NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("HighScore");で宣言
2.query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
//検索成功したら if (e == null) { } });
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("HighScore");//
query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
//検索成功したら if (e == null) { } });
5.文字列データを保存して、取得してDebug.logするコード
blockSaveData.SaveAsync((NCMBException e) =>{}で保存する。通信が成功した時の処理。しなかった時の処理をかける。
query.FindAsync((NCMBException e) =>で取得。Fetch(取ってくる)Async(非同期通信)という意味で、非同期通信は通信できなかった場合でも次の処理に進む事。
objectIDで取得の場合はFecthAsyncを使う。
記事は以上です。お疲れ様でした😌
Discussion