facebook twitter hatena line email

「Unity/Firebase/Realtimedatabase/更新」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「 ==変更があったら呼び出し== <pre> public class SampleScene : MonoBehaviour { void Start() { // Get the root reference location of the database....」)
 
(UpdateChildrenAsyncで更新)
 
(同じ利用者による、間の5版が非表示)
行10: 行10:
  
 
         // 変更があったら呼び出し
 
         // 変更があったら呼び出し
         FirebaseDatabase.DefaultInstance.GetReference("user")
+
         FirebaseDatabase.DefaultInstance.GetReference("users")
 
             .Child("name").ValueChanged += HandleNameValueChanged;
 
             .Child("name").ValueChanged += HandleNameValueChanged;
  
 
         // 書き込み
 
         // 書き込み
         FirebaseDatabase.DefaultInstance.GetReference("user")
+
         FirebaseDatabase.DefaultInstance.GetReference("users")
 
         .Child("name")
 
         .Child("name")
 
         .SetValueAsync("taro");
 
         .SetValueAsync("taro");
行32: 行32:
 
==テキストフィールドから送信して、別テキストで受信するまで==
 
==テキストフィールドから送信して、別テキストで受信するまで==
 
#UIからInputFieldを選択し、/Canvas/InputFieldを作成
 
#UIからInputFieldを選択し、/Canvas/InputFieldを作成
#UIからTextを選択し、/Canvas/CommonTextを作成
+
#UIからTextを選択し、/Canvas/RecerveTextを作成
 +
#UIからTextを選択し、/Canvas/SendTextを作成
 
#以下csを用意する。
 
#以下csを用意する。
  
行54: 行55:
 
     {
 
     {
 
         reference = FirebaseDatabase.DefaultInstance.RootReference;
 
         reference = FirebaseDatabase.DefaultInstance.RootReference;
         FirebaseDatabase.DefaultInstance.GetReference("user")
+
         FirebaseDatabase.DefaultInstance.GetReference("users")
 
             .Child("name").ValueChanged += HandleNameValueChanged;
 
             .Child("name").ValueChanged += HandleNameValueChanged;
  
行69: 行70:
 
         }
 
         }
 
         Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value.ToString());
 
         Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value.ToString());
         GameObject.Find("/Canvas/CommonText").GetComponent<Text>().text = args.Snapshot.Value.ToString();
+
         GameObject.Find("/Canvas/RecerveText").GetComponent<Text>().text = args.Snapshot.Value.ToString();
 
     }
 
     }
 
     // 送信
 
     // 送信
行75: 行76:
 
     {
 
     {
 
         Debug.Log("SetName=" + name);
 
         Debug.Log("SetName=" + name);
         FirebaseDatabase.DefaultInstance.GetReference("user")
+
         FirebaseDatabase.DefaultInstance.GetReference("users")
 
         .Child("name")
 
         .Child("name")
 
         .SetValueAsync(name);
 
         .SetValueAsync(name);
 +
        GameObject.Find("/Canvas/SendText").GetComponent<Text>().text = name;
 
     }
 
     }
 
     // テキスト変更イベント
 
     // テキスト変更イベント
行86: 行88:
 
     }
 
     }
 
}
 
}
 +
</pre>
 +
==UpdateChildrenAsyncで更新==
 +
<pre>
 +
DatabaseReference reference;
 +
void Start()
 +
{
 +
    reference = FirebaseDatabase.DefaultInstance.RootReference;
 +
  string key = FirebaseDatabase.DefaultInstance.GetReference("hoge").Push().Key;
 +
  Dictionary<string, object> childUpdates = new Dictionary<string, object>();
 +
  childUpdates["/hoge/" + key] = "test";
 +
  reference.UpdateChildrenAsync(childUpdates);
 +
}
 +
</pre>
 +
以下のようなデータが出来る。
 +
hoge/-MkRw53-s81CwOXXBFLa: "test"
 +
 +
参考:https://firebase.google.com/docs/database/unity/retrieve-data?hl=ja
 +
 +
==イベント削除==
 +
-=とすれば良い。
 +
<pre>
 +
DatabaseReference userReference = FirebaseDatabase.DefaultInstance.GetReference("ChatUsers");
 +
userReference.ChildAdded -= ChatUserAdded;
 +
userReference.ChildChanged -= ChatUserChanged;
 +
userReference.ChildRemoved -= ChatUserRemoved;
 
</pre>
 
</pre>

2021年10月4日 (月) 15:16時点における最新版

変更があったら呼び出し

public class SampleScene : MonoBehaviour
{
    void Start()
    {
        // Get the root reference location of the database.
        DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

        // 変更があったら呼び出し
        FirebaseDatabase.DefaultInstance.GetReference("users")
            .Child("name").ValueChanged += HandleNameValueChanged;

        // 書き込み
        FirebaseDatabase.DefaultInstance.GetReference("users")
        .Child("name")
        .SetValueAsync("taro");
    }
    private void HandleNameValueChanged(object sender, ValueChangedEventArgs args)
    {
        if (args.DatabaseError != null)
        {
            Debug.LogError(args.DatabaseError.Message);
            return;
        }
        Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value);
    }
}

テキストフィールドから送信して、別テキストで受信するまで

  1. UIからInputFieldを選択し、/Canvas/InputFieldを作成
  2. UIからTextを選択し、/Canvas/RecerveTextを作成
  3. UIからTextを選択し、/Canvas/SendTextを作成
  4. 以下csを用意する。

入力したテキストが、別端末の同アプリにリアルタイムに表示されるれば成功。

サンプル

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;

public class SampleScene : MonoBehaviour
{
    DatabaseReference reference;
    void Start()
    {
        reference = FirebaseDatabase.DefaultInstance.RootReference;
        FirebaseDatabase.DefaultInstance.GetReference("users")
            .Child("name").ValueChanged += HandleNameValueChanged;

        InputField input = GameObject.Find("/Canvas/InputField").GetComponent<InputField>();
        input.onValueChanged.AddListener(OnValueChanged);
    }
    // 受信
    void HandleNameValueChanged(object sender, ValueChangedEventArgs args)
    {
        if (args.DatabaseError != null)
        {
            Debug.LogError(args.DatabaseError.Message);
            return;
        }
        Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value.ToString());
        GameObject.Find("/Canvas/RecerveText").GetComponent<Text>().text = args.Snapshot.Value.ToString();
    }
    // 送信
    void SetName(string name)
    {
        Debug.Log("SetName=" + name);
        FirebaseDatabase.DefaultInstance.GetReference("users")
        .Child("name")
        .SetValueAsync(name);
        GameObject.Find("/Canvas/SendText").GetComponent<Text>().text = name;
    }
    // テキスト変更イベント
    void OnValueChanged(string value)
    {
        Debug.Log("OnValueChanged=" + value);
        SetName(value);
    }
}

UpdateChildrenAsyncで更新

DatabaseReference reference;
void Start()
{
    reference = FirebaseDatabase.DefaultInstance.RootReference;
   string key = FirebaseDatabase.DefaultInstance.GetReference("hoge").Push().Key;
   Dictionary<string, object> childUpdates = new Dictionary<string, object>();
   childUpdates["/hoge/" + key] = "test";
   reference.UpdateChildrenAsync(childUpdates);
}

以下のようなデータが出来る。

hoge/-MkRw53-s81CwOXXBFLa: "test"

参考:https://firebase.google.com/docs/database/unity/retrieve-data?hl=ja

イベント削除

-=とすれば良い。

DatabaseReference userReference = FirebaseDatabase.DefaultInstance.GetReference("ChatUsers");
userReference.ChildAdded -= ChatUserAdded;
userReference.ChildChanged -= ChatUserChanged;
userReference.ChildRemoved -= ChatUserRemoved;