我正在与Unity一起使用Firebase服务实现一个小游戏。我对Firebase RealtimeDataBase有点问题。 我有一个方法“ UpdateScoreAsync”,该方法将新玩家的记录发布到数据库中。现在,我用如下代码调用此方法:
await UpdateScoreAsync();
LoadScene("ReloadActualScene"); // It starts the game again.
它很好用,但是就像您可以在代码中看到的那样,当乐谱完全更新时,将加载新场景。我的目标是在更新乐谱时加载新场景,但是如果我只是删除“等待”,则在重新加载场景时会中断游戏。我看到设备的日志(Android),我认为问题是这样的:
没有调用DetachCurrentThread退出本机线程(也许要使用pthread_key_create析构函数?)(等)
UpdateScoreAsync方法的对象是单个对象,并且在重新加载场景时不会破坏它。比赛全攻破,比分在数据库中更新!
我当前的方法“ UpdateScoreAsync”是这样的:
public async Task UpdateScoreAsync(string userId, int newScore)
{
Debug.Log("Actualizando puntuación en la base de datos...");
await FirebaseDatabase.DefaultInstance.GetReference("string").Child("string").Child("Score").SetValueAsync(newScore).ContinueWith(task => {
if (task.IsFaulted) {
...
} else if (task.IsCanceled) {
...
} else if (task.IsCompleted) {
Debug.Log("Score updated");
...
}
});
}
我试图像这样改变这种方法:
public void UpdateScoreAsync(string userId, int newScore)
{
Debug.Log("Actualizando puntuación en la base de datos...");
FirebaseDatabase.DefaultInstance.GetReference("string").Child("string").Child("Score").SetValueAsync(newScore).ContinueWith(task => {
if (task.IsFaulted) {
...
} else if (task.IsCanceled) {
...
} else if (task.IsCompleted) {
Debug.Log("Score updated");
...
}
});
}
并调用此方法:
UpdateScoreAsync();
LoadScene("ReloadActualScene");
使用此新代码,我得到了我之前解释的错误。有人可以帮我吗?我不知道错误在哪里。
谢谢!
答案 0 :(得分:0)
根据Unity文档中的LoadScene():
注意:由于加载设置为在下一个渲染帧中完成,因此即使AsyncOperation.allowSceneActivation设置为false,调用SceneManager.LoadScene也会强制所有以前的AsynOperations完成。可以通过改用LoadSceneAsync来避免这种情况。
尝试改用LoadSceneAsync。