【发布时间】:2017-03-26 07:22:27
【问题描述】:
关于 Unity C# 和全新的 Firebase SDK,我有一个更普遍的问题。我浏览了所有新文档,但还没有看到答案。如果您从下面的数据库中检索数据,它不允许您在此函数中执行诸如 Instantiate 之类的方法,因为它不在主线程上发生。你会怎么做呢? TLDR 我想知道如何在从 Firebase 检索内容之后或同时执行游戏功能。
FirebaseDatabase.DefaultInstance
.GetReference("Scenes").OrderByChild("order")
.ValueChanged += (object sender2, ValueChangedEventArgs e2) => {
if (e2.DatabaseError != null) {
Debug.LogError(e2.DatabaseError.Message);
}
scenes = asset.text.Split('\n');
return;
}
if (e2.Snapshot != null && e2.Snapshot.ChildrenCount > 0) {
sceneCollection.Clear();
foreach (var childSnapshot in e2.Snapshot.Children) {
var sceneName = childSnapshot.Child("name").Value.ToString();
sceneCollection.Add( new SceneItem(sceneName, 0));
// I WANTED TO INSTANTIATE SOMTHING HERE
}
}
};
【问题讨论】:
-
我还没查!但是如果你用谷歌搜索“Unity3D 回调到主线程”,你会发现很多关于这个例子的讨论......forum.unity3d.com/threads/mainthread-function-caller.348198......
-
我建议从资产商店获取处理线程的(优秀)包之一;它将解决问题。令人惊讶的是 Firebase 没有“投入一些东西”来处理这个问题。
-
非常感谢 JB 我会试试的。另外,我将向 Firebase 团队提出功能请求。
-
对,很奇怪他们没有解决这个问题。很抱歉我没有机会看它;你很确定他们没有包含返回主线程的机制吗?
-
BTW 在那个代码中你 += ... 我鼓励你在你的脚本中把它作为一个单独的函数,并且 += 那个函数 - 它只是更清楚到底发生了什么你知道吗?
标签: c# unity3d firebase firebase-realtime-database