創作世界のいろいろ〜AdobeとかC#とか

絵を描く人がC#とか3Dとか動画編集とかやる為の備忘録

【NCMB】Unityで会員管理内の独自フィールドを取得する

ユーザーがメモしたときにメモを一覧にして記憶できる機能を実装したくて調べてみました。

会員管理の独自フィールドとは

ユーザーだけが取得できるデータをNCMBで管理したいときに作成します。会員管理に独自フィールド(phonenumberとか)を設定できます。

指定可能な型は文字列、int、配列、オブジェクト、緯度経度。

※ランキングに反映させるスコアなどは、一般的にデータストアで管理します。

 

結果

できました(条件付き)

課題

Json型で送受信したいがうまくいかない

 

手順

まず、NCMBのダッシュボード上で独自フィールドを新規追加しておきます。

テスト用に予めカンマで区切っておいた文字列を登録しました。
※ここで本当はJsonにしたかった。でもNCMB上でオブジェクト型にはならず、配列型になってしまいます。
そして配列型ならば、と色々Unity側で変換させようと思いましたが私の経験値では無理でした…

 


Unityで、下記のようなscriptを追加します。


if (currentUser.ContainsKey("userMemo")) { string toString = currentUser["userMemo"] as string; toLst = toString.Split(','); toList(toLst); } else { UnityEngine.Debug.Log("userMemo not found."); } public void toList(string[] toLst) { this.toLst = toLst; var userMemoList = new List<userMemoModel>(); userMemoList.Add(new userMemoModel { Title = toLst[0], Date = toLst[1], Memo = toLst[2], }); Debug.Log(userMemoList[0].Title + "タイトルを入力"); Debug.Log(userMemoList[0].Date + "メモした日"); Debug.Log(userMemoList[0].Memo + "メモ"); } public class userMemoModel { public string Title { get; set; } public string Date { get; set; } public string Memo { get; set; } }

以下の部分です

User.ContainsKey("userMemo")

Keyの名前で検索して、フィールドがある場合はtrueを返します。

そして、以下の部分で実際に値を取得(string変換も)しています。

currentUser["userMemo"] as string;

複数の値ではなく単一の値であれば、これでUnity内で操作ができるはずです。

 

今回はリスト化したいので、NCMBUser から文字列を取得したら、カンマ区切りでリスト<string>化しています。

toLst = toString.Split(',');

その後、そのリストをリスト<カスタムクラス>に割り当てます。

userMemoList[0].~~ 部分がきちんとNCMBで登録した文字列になってますね。

これでどんどんAddしていけば、タイトル、日付、メモの内容を一覧で管理できるようになります。機種変更されても問題無しです。

でも別記事と同じ方法になってしまいました。機能はしてるので今はこれで良しとします。。

メモ技術は社会人にとっては超重要だと思います*