LoginSignup
8
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-11

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

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のリファレンスは以下

以降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

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7