【ハルシオンブログ】NCMBの簡単な使い方。データの保存の仕方。公式のマニュアルみれば大体わかるとおもうけどね! 後編!
こんにちは。坂内っす。
最近WoWのやりすぎで首と肩が痛いっす。
さて、先週NCMBへのデータの保存方法を書きましたので、今回はNCMBへデータ保存したやつを持ってくる方法を簡単に紹介。
【ハルシオンブログ】NCMBの簡単な使い方。データの保存の仕方。公式のマニュアルみれば大体わかるとおもうけどね!
とりあえず今回はNCMBが勝手に一意のIDをデータ毎に振り分けてるものがあるので、それを使いたいと思います。
前回登録したときの事覚えてますか?

登録成功したときに ObjectIDというのを取ってきてますよね。
ってことで、こいつをPlayerprefにでも突っ込んでおけば、次回読み込み時にそのIDを使ってデータを持ってこれます。
では、前回のTestNCMBManagerをいじってみましょう。
[TestNCMBManager.cs](赤文字が追加行)
今回追加したのは赤文字のところです。
データ保存が成功したときにPlayerprefにtestClassのObjectIDを保存しています。
画面の方もいじっていきましょう。

登録ボタンの下に読み込みボタンを配置してみました。
動作としては、読み込みボタンを押したときに、一度データが保存されている場合のみ、データを読み込み、Debugで表示してみましょう。
[TestNCMBManager.cs](赤文字が追加行)
では、実行してみます。

まだ上記コードを入れた後に登録していないので、こうなりますね。
それでは一旦データを登録してから読み込んでみます。

取れました!
●NCMBObject findObj = new NCMBObject("TestDataObject");
で、TestDataObjectのテーブルを指定。
●findObj.ObjectId = myObjectKeyId;
で、ObjectIDを指定。
●findObj.FetchAsync((NCMBException e) => {}
で、NCMBにあるTestDataObjectのテーブルに接続し、上記指定ObjectIDのレコードにフェッチしてる感じですかね。
●findObj["name"] や findObj["age"]
で、そのレコードのデータを実際にとってきてますね。
今回はObjectIDを使用したフェッチでしたが、SQLのWhereみたいに色んな条件でデータを取ることも可能です。
たとえばこんなデータがあったとき

ageが「19」のデータを取りたいといった場合に、以下のような感じで取れます。

という感じでデータはとれるようです!
ってことで、NCMBのお話後編はこれにて終了!
あでゅ~ノシ
最近WoWのやりすぎで首と肩が痛いっす。
さて、先週NCMBへのデータの保存方法を書きましたので、今回はNCMBへデータ保存したやつを持ってくる方法を簡単に紹介。
【ハルシオンブログ】NCMBの簡単な使い方。データの保存の仕方。公式のマニュアルみれば大体わかるとおもうけどね!
とりあえず今回はNCMBが勝手に一意のIDをデータ毎に振り分けてるものがあるので、それを使いたいと思います。
前回登録したときの事覚えてますか?

登録成功したときに ObjectIDというのを取ってきてますよね。
ってことで、こいつをPlayerprefにでも突っ込んでおけば、次回読み込み時にそのIDを使ってデータを持ってこれます。
では、前回のTestNCMBManagerをいじってみましょう。
[TestNCMBManager.cs](赤文字が追加行)
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
using NCMB;
public class TestNCMBManager : MonoBehaviour {
public InputField inpNameObj;
public Dropdown drpAgeObj;
public ToggleGroup tglSexCodeGroupObj;
public InputField inpCommentObj;
public void OnClickSubmit() {
string name = inpNameObj.text;
string age = drpAgeObj.options[drpAgeObj.value].text;
string sex = tglSexCodeGroupObj.ActiveToggles().First().GetComponentsInChildren<Text>()
.First(t => t.name == "Label").text;
string comment = inpCommentObj.text;
Debug.Log("名前:" + name + "\r\n年齢:" + age + "\r\n性別:"
+ sex + "\r\nコメント:" + comment);
Write_NCMB(name,age,sex,comment);
}
private void Write_NCMB(string name,string age,string sex,string comment) {
// TestDataObjectを生成
NCMBObject testClass = new NCMBObject("TestDataObject");
// オブジェクトに値を設定
testClass["name"] = name;
testClass["age"] = age;
testClass["sex"] = sex;
testClass["comment"] = comment;
// データストアへの登録
testClass.SaveAsync((NCMBException e) => {
if(e != null) {
Debug.Log("保存に失敗しました。\n ErrorCode : " + (string)e.ErrorMessage + "\n");
} else {
Debug.Log("保存に成功しました。\n objectId : " + (string)testClass.ObjectId + "\n");
PlayerPrefs.SetString("ncmbtest", (string)testClass.ObjectId);
}
}
);
}
}
今回追加したのは赤文字のところです。
データ保存が成功したときにPlayerprefにtestClassのObjectIDを保存しています。
画面の方もいじっていきましょう。

登録ボタンの下に読み込みボタンを配置してみました。
動作としては、読み込みボタンを押したときに、一度データが保存されている場合のみ、データを読み込み、Debugで表示してみましょう。
[TestNCMBManager.cs](赤文字が追加行)
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
using System.Collections.Generic;
using NCMB;
public class TestNCMBManager : MonoBehaviour {
public InputField inpNameObj;
public Dropdown drpAgeObj;
public ToggleGroup tglSexCodeGroupObj;
public InputField inpCommentObj;
public void OnClickSubmit() {
string name = inpNameObj.text;
string age = drpAgeObj.options[drpAgeObj.value].text;
string sex = tglSexCodeGroupObj.ActiveToggles().First().GetComponentsInChildren<Text>()
.First(t => t.name == "Label").text;
string comment = inpCommentObj.text;
Debug.Log("名前:" + name + "\r\n年齢:" + age + "\r\n性別:"
+ sex + "\r\nコメント:" + comment);
Write_NCMB(name,age,sex,comment);
}
public void OnClickLoad() {
string myObjectKeyId = PlayerPrefs.GetString("ncmbtest", "");
if(myObjectKeyId != "") {
// TestDataObjectクラスを検索するクエリ作成
NCMBObject findObj = new NCMBObject("TestDataObject");
findObj.ObjectId = myObjectKeyId;
// データを検索
findObj.FetchAsync((NCMBException e) => {
if(e != null) {
// 検索失敗
Debug.Log("検索に失敗しました。" + e.ErrorCode);
} else {
string strData = "";
strData += "名前:" + System.Convert.ToString(findObj["name"]) + "\r\n";
strData += "年齢:" + System.Convert.ToString(findObj["age"]) + "\r\n";
strData += "性別:" + System.Convert.ToString(findObj["sex"]) + "\r\n";
strData += "コメント:" + System.Convert.ToString(findObj["comment"]) + "\r\n";
Debug.Log(strData);
}
});
} else {
// 空の場合
Debug.Log("データが保存されていません。いったんデータを保存してね!");
}
}
private void Write_NCMB(string name,string age,string sex,string comment) {
// TestDataObjectを生成
NCMBObject testClass = new NCMBObject("TestDataObject");
// オブジェクトに値を設定
testClass["name"] = name;
testClass["age"] = age;
testClass["sex"] = sex;
testClass["comment"] = comment;
// データストアへの登録
testClass.SaveAsync((NCMBException e) => {
if(e != null) {
Debug.Log("保存に失敗しました。\n ErrorCode : " + (string)e.ErrorMessage + "\n");
} else {
Debug.Log("保存に成功しました。\n objectId : " + (string)testClass.ObjectId + "\n");
PlayerPrefs.SetString("ncmbtest", (string)testClass.ObjectId);
}
}
);
}
}
では、実行してみます。

まだ上記コードを入れた後に登録していないので、こうなりますね。
それでは一旦データを登録してから読み込んでみます。

取れました!
●NCMBObject findObj = new NCMBObject("TestDataObject");
で、TestDataObjectのテーブルを指定。
●findObj.ObjectId = myObjectKeyId;
で、ObjectIDを指定。
●findObj.FetchAsync((NCMBException e) => {}
で、NCMBにあるTestDataObjectのテーブルに接続し、上記指定ObjectIDのレコードにフェッチしてる感じですかね。
●findObj["name"] や findObj["age"]
で、そのレコードのデータを実際にとってきてますね。
今回はObjectIDを使用したフェッチでしたが、SQLのWhereみたいに色んな条件でデータを取ることも可能です。
たとえばこんなデータがあったとき

ageが「19」のデータを取りたいといった場合に、以下のような感じで取れます。
//TestDataObjectを検索するクラスを作成
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("TestDataObject");
//ageの値が"19歳"と一致するオブジェクト検索
query.WhereEqualTo("age","19歳");
query.FindAsync((List<NCMBObject> objList, NCMBException e) => {
if(e != null) {
//検索失敗時の処理
} else {
//ageが"19歳"の名前を出力
foreach(NCMBObject obj in objList) {
Debug.Log("名前:" + System.Convert.ToString(obj["name"]));
}
}
});

という感じでデータはとれるようです!
ってことで、NCMBのお話後編はこれにて終了!
あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】どのシーンから始めてもほしいGameObjectのお話 | 【ハルシオンブログ】非アクティブのゲームオブジェクトを取得したいときなんかの話 »
コメント
| h o m e |