UnityでFirebase Storeからデータを読み書きする
投稿日2023-02-03
更新日2024-05-17
目次(タップして移動)
Firebaseの登録と設定
Firebaseの登録と初期設定については、前回の記事を御覧ください。
- firebaseアカウントの作成
- firebase consoleでプロジェクトの作成
- プロジェクト内にUnity用アプリを作成
- iOSかAndroidを選択
- 設定用のjsonファイルをダウンロード
- SDKファイルのダウンロード
ここまでは前回記事と同じです。今回は画面左のメニューからFireStoreを押して下さい。
FireStoreのルール設定
そのままでも暫くは利用できますが、継続使用するならルール変更しないといけません。画面の例では読み書きフルアクセスですのでご注意下さい。あくまでテスト用です。
Unity側の設定
- Firebase SDKを任意の場所に解凍してFireStoreのパッケージをインストールする。
- Unityエディター上で空オブジェクトを作成し、下記のc#スクリプトをアタッチする。
C#スクリプトの作成
FirebaseStoreManager.csusing System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using Firebase.Firestore; public class FirebaseStoreManager : MonoBehaviour { FirebaseFirestore db; /// <summary> /// 初期化 /// </summary> public void Start() { db = FirebaseFirestore.DefaultInstance; } /// <summary> /// FireStoreからの読み込み /// </summary> /// <returns>Dictionary型で返す</returns> public async Task<Dictionary<string, object>> ReadFireStore(string collection, string document) { DocumentReference docRef = db.Collection(collection).Document(document); Dictionary<string, object> result = new Dictionary<string, object>(); var shot = await docRef.GetSnapshotAsync(); result = shot.ToDictionary(); return result; } /// <summary> /// 新規ドキュメント作成 /// </summary> public async void WriteFireStore(string collection, string document, Dictionary<string, object> fields) { DocumentReference docRef = db.Collection(collection).Document(document); await docRef.SetAsync(fields); } /// <summary> /// 既存ドキュメントへの上書き /// </summary> public async void UpdateFireStore(string collection, string document, Dictionary<string, object> fields) { DocumentReference docRef = db.Collection(collection).Document(document); await docRef.UpdateAsync(fields); } /// <summary> /// ドキュメントの削除 /// </summary> public async void DeleteFireStore(string collection, string document) { DocumentReference docRef = db.Collection(collection).Document(document); await docRef.DeleteAsync(); } }
実行結果
書き込み
テストデータとして、Player、001というドキュメントを新規作成してFIREBASE上に保存してみます。読み書きのデータは基本的にDictionary型になります。Dictionary型についての詳細はUnityやC#のドキュメントを御覧下さい。
public void Start() { db = FirebaseFirestore.DefaultInstance; Dictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("name", "gazushige"); dict.Add("class", "warrior"); dict.Add("level", 1); WriteFireStore("Player", "001", dict); }
実行後、FIREBASE管理画面で確認したところ、ちゃんと保存されているようです。 ちなみにWriteはUpdateも兼ねています。Updateは指定したドキュメントが存在しない時エラーになります。
読み込み
こんな感じで読み込むことが出来ます。読み込んだものはDictionary型なので、keysを取ってforeach等で取得出来ます。取得は非同期なのでasync/awaitが必要です。
public async void Start() { db = FirebaseFirestore.DefaultInstance; var res = await ReadFireStore("Player", "001"); foreach (var i in res.Keys) Debug.Log($"{i} : {res[i]}"); }
実行した結果、ログが2回ずつ表示されてますが、ちゃんと読み込めているようです。
さいごに
以前にも書きましたが、テスト環境では無料枠で問題ありませんが、本番運用する際は料金表をよく読みアクセス頻度等を考慮して採算割れすることが無いように十分注意しましょう。
サイト管理者
がずしげ
- アプリ開発
- 株式投資、等
関連記事
最新記事
スポンサーリンク
このサイトをシェアする