「Unity/Firebase/Realtimedatabase」の版間の差分
提供: 初心者エンジニアの簡易メモ
| 行9: | 行9: | ||
[[Unity/Firebase/Realtimedatabase/切断]] | [[Unity/Firebase/Realtimedatabase/切断]] | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
==json更新== | ==json更新== | ||
2021年9月19日 (日) 10:50時点における版
Unity/Firebase/Realtimedatabase/インストール
Unity/Firebase/Realtimedatabase/基本
Unity/Firebase/Realtimedatabase/更新
Unity/Firebase/Realtimedatabase/リスト
Unity/Firebase/Realtimedatabase/切断
目次
json更新
FirebaseDatabase.DefaultInstance.GetReference("users")
.Child("name")
.SetRawJsonValueAsync("{'name': 'taro','age' : 25}");
変更があったら呼び出し
public class SampleScene : MonoBehaviour
{
void Start()
{
// Get the root reference location of the database.
DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
// 変更があったら呼び出し
FirebaseDatabase.DefaultInstance.GetReference("user")
.Child("name").ValueChanged += HandleNameValueChanged;
// 書き込み
FirebaseDatabase.DefaultInstance.GetReference("user")
.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/CommonTextを作成
- 以下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("user")
.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/CommonText").GetComponent<Text>().text = args.Snapshot.Value.ToString();
}
// 送信
void SetName(string name)
{
Debug.Log("SetName=" + name);
FirebaseDatabase.DefaultInstance.GetReference("user")
.Child("name")
.SetValueAsync(name);
}
// テキスト変更イベント
void OnValueChanged(string value)
{
Debug.Log("OnValueChanged=" + value);
SetName(value);
}
}
階層
/で区切ったり、
.Child("na/me")
Childでつなげたり。
.Child("na").Child("me")
jsonをそのまま送信
User user = new User("taro", "taro@example");
string json = JsonUtility.ToJson(user);
string userId = "111";
FirebaseDatabase.DefaultInstance.GetReference("user").Child(userId)
.SetRawJsonValueAsync(json);
User.cs
public class User
{
public string username;
public string email;
public User(string username, string email)
{
this.username = username;
this.email = email;
}
}
keyを生成
userに存在しないキーを生成
string key = FirebaseDatabase.DefaultInstance.GetReference("user").Push().Key;
リスト
追加、更新、削除を検知
using UnityEngine;
using UnityEngine.UI;
using Firebase.Database;
using System.Collections.Generic;
using System;
public class SampleScene : MonoBehaviour
{
void Start()
{
DatabaseReference userReference = FirebaseDatabase.DefaultInstance.GetReference("user");
userReference.ChildAdded += HandleChildAdded;
userReference.ChildChanged += HandleChildChanged;
userReference.ChildRemoved += HandleChildRemoved;
InputField input = GameObject.Find("/Canvas/InputField").GetComponent<InputField>();
GameObject.Find("AddButton").GetComponent<Button>().onClick.AddListener(delegate {
AddUser(input.text);
});
}
// 受信 追加された時
void HandleChildAdded(object sender, ChildChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string json = args.Snapshot.GetRawJsonValue();
Debug.Log("HandleChildAdded=" + json); // {"email":"ttt@example","username":"ttt"}
User user = JsonUtility.FromJson<User>(json);
Debug.Log("HandleChildAdded username=" + user.username);
}
// 受信 更新された時
void HandleChildChanged(object sender, ChildChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string json = args.Snapshot.GetRawJsonValue();
Debug.Log("HandleChildChanged=" + json); // {"email":"ttt@example","username":"ttt"}
User user = JsonUtility.FromJson<User>(json);
Debug.Log("HandleChildChanged username=" + user.username);
}
// 受信 削除された時
void HandleChildRemoved(object sender, ChildChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string json = args.Snapshot.GetRawJsonValue();
Debug.Log("HandleChildRemoved=" + json); // {"email":"ttt@example","username":"ttt"}
User user = JsonUtility.FromJson<User>(json);
Debug.Log("HandleChildRemoved username=" + user.username);
}
void AddUser(string name)
{
User user = new User(name, name + "@example");
string json = JsonUtility.ToJson(user); // {"email":"ttt@example","username":"ttt"}
// userに存在しないキーを生成
// FirebaseDatabase.DefaultInstance.GetReference("user").Push().Key;
#if Unity_EDITOR
string userId = "pc";
#elif UNITY_ANDROID
string userId = "android";
#elif UNITY_IPHONE
string userId = "iphone";
#endif
FirebaseDatabase.DefaultInstance.GetReference("user").Child(userId)
.SetRawJsonValueAsync(json);
}
}
切断
DatabaseReference.GoOffline();
とか?切断できてるか不明・・・。
参考
https://firebase.google.com/docs/database/unity/save-data?hl=ja
