logo

UnityでFirebase Storeからデータを読み書きする

投稿日2023-02-03

更新日2024-05-17

Picture of the logo
目次(タップして移動)

Firebaseの登録と設定

Firebaseの登録と初期設定については、前回の記事を御覧ください。

  • firebaseアカウントの作成
  • firebase consoleでプロジェクトの作成
  • プロジェクト内にUnity用アプリを作成
  • iOSかAndroidを選択
  • 設定用のjsonファイルをダウンロード
  • SDKファイルのダウンロード

ここまでは前回記事と同じです。今回は画面左のメニューからFireStoreを押して下さい。

FireStoreのルール設定

そのままでも暫くは利用できますが、継続使用するならルール変更しないといけません。画面の例では読み書きフルアクセスですのでご注意下さい。あくまでテスト用です。 rule

Unity側の設定

  • Firebase SDKを任意の場所に解凍してFireStoreのパッケージをインストールする。
  • Unityエディター上で空オブジェクトを作成し、下記のc#スクリプトをアタッチする。

C#スクリプトの作成

FirebaseStoreManager.cs
using 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管理画面で確認したところ、ちゃんと保存されているようです。 rule ちなみに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回ずつ表示されてますが、ちゃんと読み込めているようです。 result

さいごに

以前にも書きましたが、テスト環境では無料枠で問題ありませんが、本番運用する際は料金表をよく読みアクセス頻度等を考慮して採算割れすることが無いように十分注意しましょう。






このサイトをシェアする