「Unity/Firebase/Realtimedatabase/更新」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→UpdateChildrenAsyncで更新) |
|||
(同じ利用者による、間の3版が非表示) | |||
行10: | 行10: | ||
// 変更があったら呼び出し | // 変更があったら呼び出し | ||
− | FirebaseDatabase.DefaultInstance.GetReference(" | + | FirebaseDatabase.DefaultInstance.GetReference("users") |
.Child("name").ValueChanged += HandleNameValueChanged; | .Child("name").ValueChanged += HandleNameValueChanged; | ||
// 書き込み | // 書き込み | ||
− | FirebaseDatabase.DefaultInstance.GetReference(" | + | FirebaseDatabase.DefaultInstance.GetReference("users") |
.Child("name") | .Child("name") | ||
.SetValueAsync("taro"); | .SetValueAsync("taro"); | ||
行55: | 行55: | ||
{ | { | ||
reference = FirebaseDatabase.DefaultInstance.RootReference; | reference = FirebaseDatabase.DefaultInstance.RootReference; | ||
− | FirebaseDatabase.DefaultInstance.GetReference(" | + | FirebaseDatabase.DefaultInstance.GetReference("users") |
.Child("name").ValueChanged += HandleNameValueChanged; | .Child("name").ValueChanged += HandleNameValueChanged; | ||
行76: | 行76: | ||
{ | { | ||
Debug.Log("SetName=" + name); | Debug.Log("SetName=" + name); | ||
− | FirebaseDatabase.DefaultInstance.GetReference(" | + | FirebaseDatabase.DefaultInstance.GetReference("users") |
.Child("name") | .Child("name") | ||
.SetValueAsync(name); | .SetValueAsync(name); | ||
行88: | 行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); } }
テキストフィールドから送信して、別テキストで受信するまで
- UIからInputFieldを選択し、/Canvas/InputFieldを作成
- UIからTextを選択し、/Canvas/RecerveTextを作成
- UIからTextを選択し、/Canvas/SendTextを作成
- 以下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;