UnityでFirebaseを使ってデータの保存を行う
最近自分の中でFirebaseを使うことが多くて
UnityからもAssetを使えばかんたんにできるそうなのでやってみました。
まだ自分でも不明点みたいなのがいっぱいなので間違っていればご指摘ください。
* Firebase for Unityはまだアップデートされてないみたい
Cloneしてきて、インポートしてもエラーで使えません。
今回はそれは使わずにAssetを使ってみました。
Simple Firebase Unity
こちらを使います。
インポートした時はこんな感じです。
基本的に使い方は簡単ですが、どれを使っていのかはじめはわかりませんでした。
基本的には2パターン使ってFirebaseにデータを投げます。
AddQueueメソッドを使う
これはまとまったデータを投げるときなどに便利です。
個人的にはこちらを使って行きたい。。。
理由は後に説明します。
Child & Pushメソッドを使う
Jsonの子どもをGetしてきてそのValueとしてデータを投げる方法
基本的にデータのやり取りが頻繁な場合はこちらを使います。
こっちを最初使っていてコケた。
初期準備
一つのFirebaseを使う場合は基本的にシングルトンで書いてもいいと思います。
まずはなんにも使わず(Observerを使えば通知ができる)書いていきます。
ここまでで何か空のゲームオブジェクトにアタッチすれば他のクラスから呼び出して使うことができます。
Child & Pushを使ってみる
こんな感じでPushできるようにします。
ちゃんとPushが成功すればSuccessLogがでます。
ちゃんとこんな感じでFirebaseで確認できます。
コードはこんな感じ!めっちゃ簡単!
// NetworkTest.cs public InputField input; public void PushText () { // Attach Button OnClick. if (input.text != "") { NetworkSingleton.Instance.firebase.Child ("message", true).Push ("{\"name\": \"kazuma\",\"text\": \""+input.text+"\"}", true); } }
ただここで気になったのはJsonなのですが
messageの下に文字列が入ってるのが好きではないのでChild & Pushはあまり使うのは。。。とおもってしまいました。
もしいい方法があれば教えて下さい。
AddQueueメソッドを使う
AddQueueSet
一番はじめにデータをセットする際に利用します。
これを使うとデータが置き換わるので追加する場合はデータを取ってきてクライアント側でデータを追加してPushする必要があります。
AddQueuePush
まとめてChild & Pushを行うと考えてもいいと思います。
ただコレもPushした場合気になっていた部分の文字列Keyになります。
AddQueueUpdate
これがいいかなーって思ってます。
Updateなんですが、Create or Updateみたいな感じかと思います。
今回はAddQueueUpdateを使って書いていきます。
こんな感じでまとめてプッシュします。
コレを使うと謎のキーが入りません。
なのでいい感じ!
Testコードを大幅に書き換えます。
NetworkSingleton.csにもFirebaseQueueのインスタンスを追加します。
public FirebaseQueue firebaseQueue; // method Awake. firebaseQueue = new FirebaseQueue();
Jsonデータを取ってくる場合
Firebase firebase = NetworkSingleton.Instance.firebase; NetworkSingleton.Instance.firebaseQueue.AddQueueGet (firebase, "print=pretty");
あとはJsonを解析すればOKです。
ちょっとUnityだと面倒ですが。
MiniJsonとかここを参考に使うといいかもです。
qiita.com
補足
FirebaseObserverクラスがあると思いますが、Startしてデータが更新されるとコールバックによりデータを取ってくる事ができます。
Firebase × Unityでリアルタイムチャットアプリ実装してみた。 pic.twitter.com/JcyeKjXf5q
— かずま (@kazumalab) November 1, 2016
こんな感じで更新されると自動的にメッセージを受信します。