「Unity/Firebase/Realtimedatabase」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→サンプル) |
(→変更があったら呼び出し) |
||
| 行100: | 行100: | ||
} | } | ||
Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value); | Debug.Log("HandleNameValueChanged=" + args.Snapshot.Value); | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ==テキストフィールドから送信して、別テキストで受信するまで== | ||
| + | #UIからInputFieldを選択し、/Canvas/InputFieldを作成 | ||
| + | #UIからTextを選択し、/Canvas/CommonTextを作成 | ||
| + | #以下csを用意する。 | ||
| + | |||
| + | 入力したテキストが、別端末の同アプリにリアルタイムに表示されるれば成功。 | ||
| + | |||
| + | サンプル | ||
| + | <pre> | ||
| + | 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); | ||
| + | } | ||
| + | private 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); | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
2020年11月17日 (火) 02:52時点における版
Realtimedatabaseのインストール
FirebaseDatabase.unitypackageをAssets/Importからインストールする
https://firebase.google.com/download/unity?hl=ja
料金課金周り
Gcp/Firebase/RealtimeDatabase [ショートカット]
ルール
以下のようなルールになってると、更新できないので、test時は修正後のように 修正前
{
"rules": {
".read": false,
".write": false
}
}
修正後
{
"rules": {
".read": true,
".write": true
}
}
サンプル
SampleScene.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
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")
.SetValueAsync("taro");
// 読み込み
FirebaseDatabase.DefaultInstance.GetReference("users")
.Child("name")
.GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.LogError("not found users");
}
else if (task.IsCompleted)
{
DataSnapshot snapShot = task.Result;
Debug.Log(snapShot.Value);
}
});
}
}
参考:https://firebase.google.com/docs/database/unity/retrieve-data?hl=ja
参考:http://siguma-sig.hatenablog.com/entry/2018/09/30/213822
変更があったら呼び出し
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);
}
private 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);
}
}
