(:3[kanのメモ帳]スマートフォン用の表示で見る(:3[kanのメモ帳]個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。同様の機能が使いたい場合はニフティクラウドモバイルバックエンドがオススメです!追記おわりParse以下のような記事を見かけまして、なにやらParseさんはDBを勝手に作ってくれて、データのやり取りやユーザ登録&認証も簡単!みたいな感じで「Parseってプッシュ通知だけじゃなかったの...!」となかなかの衝撃でした。Unityにも対応ただ、「俺Unity使ってるしな〜Unity対応してなきゃ無理だわ〜」と思ってたらUnityのSDKが標準で準備されてる!便利!!マジか!使うしかない!!という事で使ってみました。結論から言うとめっちゃ簡単でした。ParseとはそもそもParseとはなんぞやってことで、上記の二つの記事でもあるように、自分でサーバー立てなくても楽に色々出来るよってモノです。出来る事を列挙すると、ユーザ登録&認証データの保存、読み込みデータの保存はサイト上からも行える。データの読み込みはクエリを指定して行える。プッシュ通知が送れるなんか色々分析できる?クラウドコードとやらで機能が拡張できる?なんとも多機能!サーバーサイドに興味がない人にはうってつけなサービスですね。価格、制限でもお高いでしょ〜?という事ですが、当たり前のように基本無料!いやはや良い時代です本当に。無料で使える範囲は以下の通りです。見ての通り、普通にアプリ作ってる分にはまず越えない制限なので、安心して使えますね。いうかむしろこの制限を越えたい!!もし仮にこの制限を越える状況になった場合は越えた分だけ従量課金するようです。その利用料金は「時間単位の日割り計算で請求される」ということです。制限を越えても時間単位で課金されるため、そこまで高くならない様子。これはイイネ!ただ、越えたら自動で課金されるというわけでは無く、あくまで設定するのは自分のようです。長い前置きでしたが、ここからが本題。今回はUnity+Parseでデータベースを作って、ネットワーク上でデータを管理していきたいと思います。アカウント作成まずはParseが使えるようにアカウント作成を以下のサイトで行います。upから登録が行えます。GitHubアカウント等でも使えるみたい。アプリ登録、設定Parseを実装したいアプリを先ほどのサイトから登録します。App]を押し、その下に出てきたウィンドウにアプリ名を記入し[Create]を押します。App]から行えます。SDK]というのが表示されるのこれをクリック。ダウンロードしたファイルを解凍し、解凍されたフォルダの中にある[Parse.Unity]-[Parse.Unity.dll]だけUnityのProjectにドラック&ドロップ。AndroidやiOSで動かす場合もこのファイルのみで大丈夫です。Key]を設定します。Key]はParseのサイトにログインし任意のアプリを選択した後、[Settings]-[Keys]から確認できます。これで設定完了!データ形式の設定とデータ登録Parseではデータ形式の設定やデータの登録をParseのサイト上、スクリプト上の両方から行えます。ここでは、サイト上から行う手順を紹介します。データの形式であるクラスを作成します。Class]から行えます今回はSampleClassという名前にしました。次にどんなデータを保存するか、という設定を[+Col]から列を追加して行います。name]から設定します。今回はColumn1(string)とColumn2(number)を追加しました。データ形式の登録は以上です。この形式に沿ったデータを登録する時は[+Row]をクリックして行を追加します。追加された行には何も値が設定されていないので、先ほど設定したColumn1やColumn2をクリックして、値を入力します。今度はスクリプトからデータを登録する方法です。データ形式は上記のサイト上で行ったものと同じですが、いきなりスクリプトからデータを登録しても問題ありません。コードは以下の通りです。入力NGUIを使って登録するデータを入力しています。上記の[aaa]をStringInput.valueで取得できる感じです。ParseObjectParseObjectがサイト上で登録した時のクラスになります。インスタンスを作成する際にstringでクラス名を指定します。StringInput.value);登録するデータはobject型なので、stringでもintでも問題ありません。ParseObject.SaveAsync()でデータの保存が行えます。実際に登録してみたデータをサイト上で見ると上記のようになります。ParseQueryデータを取得する時はParseQueryでクエリを作成します。クエリとは「どういうデータが欲しいか」といった条件の事です。ParseQueryもstringでクラス名を指定を指定して作成します。(PARSE_OBJECT_NAME);上記の例が一番簡単なクエリで、登録されたSampleClassのデータを全て取得します。ParseQuery.FindAsync()でデータの取得が行えます。ContinueWithSaveAsync()やFindAsync()の後に.ContinueWithを付けると、その処理結果を取得する事ができます。今回はCheckTask()で処理結果taskを見て処理が成功したかを見ています。Unity上で何度実行しても失敗する場合、Unityを再起動すると改善する事があります。FindAsyncでは取得したデータはtask.Resultに入っており、foreachを使う事で各データをParseObject型で取得できます。データの取得は、ParseObject[データ名]またはParseObject.Get(データ名)を使います。(PARSE_COLUMN_NAME_1));}取得したデータをログで出力した結果が上記の通りです。上記では特に条件を付けずにクエリを投げていましたが、これだと大量のデータを取得してしまうので、普通は何かしらの条件を設定します。上限の設定方法はParseQuery.○○()とするだけです。複数条件がある場合でもParseQuery.○○().△△()と繋げて行けばOK。(PARSE_OBJECT_NAME);と初期化されたものとします。ここに記載していないものもあるので詳しくはリファレンスを見てください。取得するデータ数に上限を設定します。(10);上記の例だと最高でも10件しかデータを取得しません。一致、不一致あるデータを持っているかを指定して取得します。"value");上記の例はだと、PARSE_COLUMN_NAME_1というkeyで登録されているデータが"value"か否かで取得するデータを判定しています。一致、不一致(複数)上記の一致、不一致の条件を複数設定して取得します。names);WhereContainsAllというのもあったのですが、全部の条件に合うってありえないような...リファレンスにも解説が無かったのでスルーGetAsyncクエリの設定では無いのですが、「自分が保存した特定データが欲しい」みたいな時に、一意に決まるobjectidとWhereEqualToを使ってデータを持ってきたい所ですが、どうやら出来ないっぽいです...そんな時はGetAsyncを使います。GetAsyncはobjectidを指定してデータを1件だけ取得します。});もしかしたら正攻法じゃないかもしれませんが、とりあえずこれで出来るということで。特定の値の一部分だけ一致しているモノを取得します。"st");"t"がどこかに含まれている。みたいな最初と最後以外に含まれてるモノは出来ないっぽいです。設定されているか否か特定のkeyで値が設定されているか否かを指定して取得します。指定した閾値に合うデータを持つものだけ取得します。10);OrEqualToを付けると指定したデータも範囲に含まれるようになるので、使い分けに注意が必要です。スキップ指定した件数分、最初のデータを無視します。query.Skip(5);イマイチ使い道が分からない...並び替え特定のkeyを基準に取得結果を並び変えます。(PARSE_COLUMN_NAME_1).ThenByDescending(PARSE_COLUMN_NAME_2);二つ目の条件は別のメソッドになっているの注意が必要です。おわりにデータの設定がサイト上からも行えるので、簡易SSPみたいのも簡単に作れますねー。こんなに便利で簡単なら早く使えば良かった...!データベースに限らず他にも機能がたくさんあるので機を見てどんどん使って行こうかと思います。はてなブログPro個人ゲーム開発者。ω、)_新作は札束風呂VRや神巫女。Policy広告はてなブログをはじめよう!kan_kikuchiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。