Edited at

ニフティクラウド mobile backendのUnity SDKを使い倒してみる-NCMBObject編-

More than 3 years have passed since last update.


クイックスタートからやってみる

http://mb.cloud.nifty.com/doc/current/introduction/quickstart_unity.html


NCMB-test.cs


using UnityEngine;
using System.Collections;
using NCMB;
using System.Collections.Generic;

public class NCMB_test : MonoBehaviour {

// Use this for initialization
void Start () {
NCMBObject testClass = new NCMBObject("TestClass");
testClass["message"] = "Hello, NCMB!";
  testClass.SaveAsync();
}

// Update is called once per frame
void Update () {

}
}


unitySDKのリファレンスは以下

http://mb.cloud.nifty.com/assets/sdk_doc/unity/Help/index.html

以降void Start()を改変して上記のドキュメントを一つづ使っていくことを始める。


.Add

Addはこうやって使うっぽい


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello, NCMB!";
testClass.Add ("key","value");
testClass.SaveAsync();

スクリーンショット 2015-09-26 22.03.46.png


.AddRangeToList

AddRangeToListは配列を保存するものらしい


NCMB-test.cs


NCMBObject testClass = new NCMBObject("TestClass");
testClass["message"] = "Hello, NCMB!";
int[] sourceDatas = new int[] { 123, 456, 789 };
IEnumerable<int> evens = sourceDatas ;
testClass.AddRangeToList ("key",evens);
testClass.SaveAsync();


実行するとこうなる

スクリーンショット 2015-09-26 22.03.46.png

IEnumerable自体が、作った配列にさまざまな操作を行えるようなものらしい

https://msdn.microsoft.com/ja-jp/library/h1x9x1b1

ちなみに現在のUnityは.NET3.5らしいので上の↑ドキュメントに書かれていることはほとんどできないが。。。


.AddRangeUniqueToList

配列についかするメソッドだが、追加前の配列と追加する配列の重複する要素は除いて追加を行う関数


NCMB-test.cs


NCMBObject testClass = new NCMBObject("TestClass");
testClass["message"] = "Hello, NCMB!";
int[] sourceDatas = new int[] { 123, 456, 789 };
IEnumerable<int> evens = sourceDatas ;
testClass.AddRangeToList ("key",evens);
int[] sourceDatas2 = new int[] { 123,999,111 };
IEnumerable<int> evens2 = sourceDatas2 ;
testClass.AddRangeUniqueToList ("key", evens2);
testClass.SaveAsync();

結果

スクリーンショット 2015-10-11 12.07.19.png


.AddToList


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello, NCMB!";
int[] sourceDatas = new int[] { 123, 456, 789 };
IEnumerable<int> evens = sourceDatas ;
testClass.AddToList ("key",evens);
testClass.SaveAsync();

結果

スクリーンショット 2015-10-11 12.42.12.png

配列が一つのオブジェクトとして認識される


.AddUniqueToList


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello, NCMB!";
int[] sourceDatas = new int[] { 123, 456, 789 };
IEnumerable<int> evens = sourceDatas ;
testClass.AddToList ("key",evens);
int[] sourceDatas2 = new int[] { 123,999,111 };
IEnumerable<int> evens2 = sourceDatas2 ;
testClass.AddUniqueToList ("key", evens2);
testClass.SaveAsync();

結果こうなる

スクリーンショット 2015-10-11 13.15.21.png


.ContainsKey

ローカルで、自分が作ったオブジェクトに特定のキーがあるかないかを調べる


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello, NCMB!";
bool result = testClass.ContainsKey("message");
Debug.Log (result);

スクリーンショット 2015-10-11 13.35.42.png


.DeleteAsync

次は削除系なのであらかじめ最初のDBの状態を示しておく

スクリーンショット 2015-10-11 16.12.07.png

この2行目のレコードを削除する


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass.ObjectId = "4BTTFMpreB0r2z78";
testClass.DeleteAsync ();

スクリーンショット 2015-10-11 16.13.02.png


.FetchAsync

次も取得系なのであらかじめ最初のDBの状態を示しておく

スクリーンショット 2015-10-11 16.38.00.png


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass.ObjectId = "swxRC66dFia3s3R3";
testClass.FetchAsync ();
System.Threading.Thread.Sleep(2000);
Debug.Log( testClass["message"] );

スクリーンショット 2015-10-11 16.33.47.png


.GetRelation

リレーションを貼り付けるメソッド、.FetchAsyncメソッドで取得したデータを別のクラスとリレーションさせる


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass.ObjectId = "swxRC66dFia3s3R3";
testClass.FetchAsync ();
System.Threading.Thread.Sleep (2000);

//親のリレーション取得
NCMBObject parentObj = new NCMBObject ("Parent_TestClass");
NCMBRelation<NCMBObject> relation = parentObj.GetRelation<NCMBObject> ("Class");

//親にリレーション追加
relation.Add (testClass);
parentObj.SaveAsync ();


すると下記のようなクラスが新たにでき「リレーションを見る」をクリックすると

スクリーンショット 2015-10-11 17.13.39.png

下記のようにリレーション先のクラスがみれる

スクリーンショット 2015-10-11 17.13.54.png


.CreateWithoutData

リレーション先を探すときに使うものらしい

上記のリレーションの関係で以下のように使うと


NCMB-test.cs

NCMBObject parentObj = NCMBObject.CreateWithoutData ("Parent_TestClass", "8FEj5hb0uDvasjvl");

parentObj.FetchAsync ((NCMBException e) => {
if (e != null) {
//エラー処理
} else {
//親のリレーション取得
NCMBRelation<NCMBObject> relation = parentObj.GetRelation<NCMBObject> ("Class");
NCMBQuery<NCMBObject> query = relation.GetQuery ();

//リレーション先検索
query.FindAsync ((List<NCMBObject> childObjList,NCMBException error) => {
if (error != null) {
//エラー処理
} else {
//成功時の処理
foreach (NCMBObject obj in childObjList) {
Debug.Log ("objectId : " + obj.ObjectId);
}
}
});
}
});


こんな風になる

スクリーンショット 2015-10-11 18.54.49.png


.Increment

次はインクリメント処理なので先ほどの「TestClass」の「key」カラムのバリューを「1」(数値に変えて追加)に変更する、ちょうど下記のような感じ

スクリーンショット 2015-10-11 17.22.38.png


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass.ObjectId = "swxRC66dFia3s3R3";
testClass.Increment ("key");
testClass.SaveAsync ();

結果こうなる

スクリーンショット 2015-10-11 17.33.09.png

ちなみに


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass.ObjectId = "swxRC66dFia3s3R3";
testClass.Increment ("key",3);
testClass.SaveAsync ();

このようにしてIncrement時に任意の数を指定すると下記のように任意の数だけインクリメントされる(減算時は-1とかを指定する)。

スクリーンショット 2015-10-11 17.38.19.png


.Remove


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello,NCMB";
testClass ["key"] = 10;
testClass.Remove ("message");
testClass.SaveAsync ();

こうなる

スクリーンショット 2015-10-11 17.56.34.png


.RemoveRangeFromList


NCMB-test.cs

NCMBObject testClass = new NCMBObject("TestClass");

testClass["message"] = "Hello,NCMB";
int[] sourceDatas = new int[] { 123, 456, 789, 10, 10 };
IEnumerable<int> evens = sourceDatas ;
testClass.AddRangeToList ("key",evens);
int[] RemoveDatas = new int[] {10};
IEnumerable<int> remove = RemoveDatas;
testClass.RemoveRangeFromList ("key",remove);
testClass.SaveAsync ();

こうなる

スクリーンショット 2015-10-11 18.26.43.png