「NCMB」カテゴリーアーカイブ

Dictionaryの使い方(MBAAS関連)

MBAASはJSON互換だけど,JSONは遅れずDictionaryが受けられるらしい.

んで,Dictionaryを真面目に使ったらエラーでるのよ.

 

いける例

using System.Collections.Generic;

public class skillSender : MonoBehaviour {
	
		 static public Dictionary<string,int> skillPDic;//スキルチェックポイント用


	// Use this for initialization
	void Start () {

			skillPDic = new Dictionary<string, int> () {
				};

	}

NGの例

using System.Collections.Generic;

public class skillSender : MonoBehaviour {
	
		 static public Dictionary<string,int> skillPDic;//スキルチェックポイント用


	// Use this for initialization
	void Start () {

			Dictionary<string,int> skillPDic = new Dictionary<string, int> () {
				};

	}

 

 

 

NCMBでデータストア管理

96時間はまったこと

  • NCMBデータストアはJSON互換だけどJSONは保存できない
  • NCMBデータストア一回のセッションに複数のログ(今回はスキルチェックの結果)を保存する場合は,Dictionaryで保存する
  • UnityのC#でDictionaryを使うには最初に「using System.Collections.Generic;」って言っておく
  • アクセス権を設定する場合,新規オブジェクトの場合は「NCMBACL acl = new NCMBACL ();」でいいが,既存の場合は一旦アクセス権を読み込んでから書き換える(参考サイト
  • データストアはACL設定しないと公開になる仕様らしい(ランキングとか用なので)
  • ACLのスクリプトでユーザ名の使い方その1
    NCMBUser user = NCMBUser.CurrentUser;
    string userName = user.UserName;
    			NCMBACL acl = new NCMBACL ();//今回のログは新規作成なのでnewでよい
    			acl.SetWriteAccess (userName, true);
    			acl.SetReadAccess (userName, true);

     

 

NCMBのオブジェクトデータをJSONで読みこむとか

標準のJSONが使えないので,miniJSONを使用

PluginsフォルダにminiJSONをDLし,コードの頭に

using MiniJSON;//use miniJSON

が必要.

ん?jsonかんけいない?

 

using MiniJSON;//use miniJSON
///もろもろのプログラム

var jsonDict = obj["skill1100"] as Dictionary<string,object>;
int kazu  = jsonDict.Count;//JSONの長さを測る
Debug.Log(jsonDict["1102"].ToString());

 

Jsonデータを作成する

Jsonデータをむりくり作成

using UnityEngine;
using System.Collections;

public class jsontest : MonoBehaviour {

	// Use this for initialization
	public string playerName;
	public int lives;
	public float health;

	public string SaveToString(){
	playerName = "cat";
		lives = 10;
		health = 9.9f;
		return JsonUtility.ToJson(this);
		//Debug.Log (myjson);
	}

	void Start(){

		var myjsondata = SaveToString ();
		Debug.Log (myjsondata);
	}

}

 

NCMB データストアの検索結果が空なのにエラーが出ないで問題になる件

ユーザ名でデータストア検索しても,ユーザ名に紐付いてるデータがないときの処理など.(あまりつかわないかもしれないけど,)

エラー出ずに,スルーして,Listがゼロのまま読み取るので最終的にエラーでる.

Listの長さを計測してゼロのときにエラーと判定させるという方法で回避

	bool checker = false;
		string useinfoStr = PlayerPrefs.GetString ("userName");//get username from playerprefs
		NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("usetInfo");
		Debug.Log ("user" + useinfoStr);
		query.WhereEqualTo ("playerName", useinfoStr);
		query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {//moto
			if (e != null) {
				//検索失敗時の処理
				//kokonihyouji
				alert1.SetActive(true);
				return;
			} else {
				
				if ( objList == null || objList.Count == 0 ){
					alert1.SetActive(true);
					return;
				}else{
				NCMBObject obj  = objList[0];
				PlayerPrefs.SetString("objID", obj.ObjectId);
				checker = true;
			}
			}
		});

if ( objList == null || objList.Count == 0 ){}

が肝

NCMB ユーザ情報の任意のフィールド値を呼び出す

NCMBの会員情報にuserTypeというプロパティでは呼び出せない値があり,それを呼び出したいとき

NCMBUser currentUser = NCMBUser.CurrentUser;//現在のユーザ情報をcurrentUserに格納
string myUserType = currentUser["userType"].ToString();
PlayerPrefs.SetString("userType", myUserType);//userTypeをPlayerprefsの_userTypeに格納

いや,これで良かったなんて,,半日くらいなやんでたのに,,

 

NCMBでログインしたユーザ名で出てくるデータのObj.IDを検索する

object IDがないとデータを取り出せないっぽい.

ログイン名でユーザ名を検索し,PlayerPrefsにセットし,

その名前で一致する(一致は完全一致みたい)データのリストをとりだし(でも1件しか入っていない),その1件目をobjに変換し,objのプロパティobjidを取り出す,,,めんどくさい

スクリプト

	public void getUserInfo(){

		string useinfoStr = PlayerPrefs.GetString ("userName");//get username from playerprefs
		NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("usetInfo");
		//Scoreの値が7と一致するオブジェクト検索
		query.WhereEqualTo ("playerName", useinfoStr);
		query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {//moto
	
			if (e != null) {
				//検索失敗時の処理
			} else {
				NCMBObject obj  = objList[0];
				PlayerPrefs.SetString("objID", obj.ObjectId);
			
			//	foreach (NCMBObject obj in objList) {
					//1件だけ出ると仮定して
			//		Debug.Log ("objectId:" + obj.ObjectId);
		//	}
			}
		});

	}