我正在用Unity实现一个使用firebase服务的小游戏。我对Firebase RealtimeDataBase有一点问题。我有一个方法“UpdateScoreAsync”,这个方法在数据库上发布新玩家的记录。现在我用这样的代码调用这个方法:
await UpdateScoreAsync();
LoadScene("ReloadActualScene"); // It starts the game again.
它工作得很好,但就像你在代码中看到的那样,当分数完全更新时会加载新场景。我的目标是在分数更新时加载新场景,但是如果我只是在重新加载场景时删除“等待”游戏中断。我看到我的设备的日志(Android),我认为问题是这样的:
没有调用DetachCurrentThread的本机线程退出(也许它会使用pthread_key_create析构函数?)(等)
UpdateScoreAsync方法的对象是单例,并且在重新加载场景时不会销毁它。 Althoug游戏破解,分数在数据库上更新!
我当前的方法“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");
使用这个新代码,我得到了之前解释过的错误。谁能帮助我?我不知道错误在哪里。
提前致谢!
根据LoadScene()的Unity文档:
注意:由于在下一个渲染帧中将加载设置为完成,因此调用SceneManager.LoadScene会强制完成所有先前的AsynOperations,即使AsyncOperation.allowSceneActivation设置为false也是如此。这可以通过使用LoadSceneAsync来避免。
请尝试使用LoadSceneAsync。