我正在使用以下代码从Unity3D用户的Firebase数据库中检索数据,在我们的情况下,我正在获得用户级别:
FirebaseDatabase.DefaultInstance
.GetReference("users").Child(userID)
.GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.LogError("Error retriving user data: " + userID);
// Handle the error...
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
int TempUserLevel = (int)snapshot.Child("Level").Value;
//this get's an error
PlayerPrefs.SetInt(_UserLevel, TempUserLevel);
}
}
错误:
TrySetInt只能从主线程调用。构造函数和 字段初始值设定项将在以下情况下从加载线程执行: 加载场景。
据我了解,任务是一个新线程,而不是Unity Main线程。仍然 我似乎无法统一保存本地值,也无法从任务中获取值。
答案 0 :(得分:1)
它不能被调用,因为continue with是一个委托并且它等待响应。我所做的只是在使用调用此委托之前设置了一个waituntil协程,并设置了bool例如一些bool check = false。
else if(task.IsCompleted)
{
// your operation
check=true;
}
////////
IEnumerator myRoutine()
{
yield return new WaitUntil ( () => check );
// set your playerprefs.
}
答案 1 :(得分:0)
实际上,您可以将“ ContinueWith”更改为“ ContinueWithOnMainThread”。