FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

NCMBのUnity SDKにおけるデータの取得方法

f:id:mbaasdevrel:20200609155631p:plain

NCMB(ニフクラ mobile backend)では多数のプラットフォームに対してSDKを提供しています。公式のものとしてはObjective-C、Swift、Java、Unity、JavaScriptなどがあります。コミュニティベースではReact Native、Flutter、Google Apps Script、VBA、Ruby、PHP、C#(Xamarin)などもあります。

ゲーム界隈の方たちにはUnity SDKが最も利用されているかと思います。今回はUnity SDKを使って、データストアに入っているデータを取得、各フィールドの値を扱う方法を解説します。

今回のデータについて

今回は次のようなデータを取得します。

フィールド名
objectId 文字列 0UjRUrPe3SPM0Mfh
createDate 日時 2021-05-31T11:12:13.933+09:00
updateDate 日時 2021-06-28T13:17:18.076+09:00
array 配列 [1,"string",[1,2,3],{"a":"b"}]
bool 真偽値 true
date 日時 2021-06-06T10:51:03.606+09:00
geo 位置情報 33.857619,122.378986
number 数値 100
numbers 配列 [1,2,3]
string 文字列 文字列です

データの取得

データの取得は NCMBObject の FetchAsync を使っています。

NCMBObject obj = new NCMBObject("TestClass");
obj.ObjectId = "0UjRUrPe3SPM0Mfh";
obj.FetchAsync((NCMBException ex) => {
  // この中でデータを取得
});

ではここから各フィールドの値を型別に取得します。

規定のフィールド

objectId / createDate / updateDate は規定のフィールドです。取得するための専用メソッドが用意されています。

Debug.Log(obj.ObjectId);
// -> 0UjRUrPe3SPM0Mfh
Debug.Log(obj.CreateDate);
// -> 05/31/2021 02:12:13
Debug.Log(obj.UpdateDate);
// -> 06/28/2021 04:17:18

文字列型

文字列の場合は ToString を使います。

// 文字列型
string text = obj["string"].ToString();
Debug.Log(text);
// -> 文字列です

数値型

数値の場合は long でキャストします。

// 数値型
long number = (long) obj["number"];
Debug.Log(number);
// -> 100

真偽値型

真偽値型も同様です。

// 真偽値型
bool bl = (bool) obj["bool"];
Debug.Log(bl);
// -> true

日付型

日付型は DateTime になります。 using System; が必要です。

// 日付型
DateTime date = (DateTime) obj["date"];
Debug.Log(date);
// -> 06/06/2021 01:51:03

位置情報型

位置情報型はNCMBGeoPointになります。キャストして利用します。

// 位置情報型
NCMBGeoPoint geo = (NCMBGeoPoint) obj["geo"];
Debug.Log(geo.Latitude);
// -> 33.857619
Debug.Log(geo.Longitude);
// -> 122.378986

配列型

まず数字の配列の場合です。ArrayListとして取得します。取得した後、さらにキャストが必要になります。

// 配列型
ArrayList res2 = obj["numbers"] as ArrayList;
long[] numbers2 = new long[res2.Count];
for (var i = 0; i < res2.Count; i++) {
    numbers2[i] = (long) res2[i];
}
Debug.Log(numbers2[2]);
// -> 3

さらに複雑な配列型

さらに複雑な場合には、各要素ごとにキャストしながら利用してください。元データは次のようになっています。

[
  1,
  "string",
  [1,2,3],
  {
    "a":"b"
  }
]
ArrayList res = obj["array"] as ArrayList;
Debug.Log("オブジェクト型");
Debug.Log(res);
// -> System.Collections.ArrayList
long num = (long) res[0];
Debug.Log(num);
// -> 1
string str = res[1].ToString();
Debug.Log(str);
// -> string
ArrayList numbers = (res[2] as ArrayList);
Dictionary<string, object> dict = res[3] as Dictionary<string, object>;
Debug.Log(dict["a"].ToString());
// -> b

キーバリューのJSONを入れている場合にはDictionary型で定義してキャストしてください。

まとめ

データストアでは柔軟にデータが格納できる一方で、アプリ上で扱う際には各型へキャストしなければいけません。位置情報型のように、データストア特有の形式になっているものもありますので、その扱い時には注意してください。

ドキュメント : 開発者向けドキュメント | ニフクラ mobile backend

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。