Unity在Firebase中使用Async和Await

问题描述 投票:0回答:1

我正在用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");

使用这个新代码,我得到了之前解释过的错误。谁能帮助我?我不知道错误在哪里。

提前致谢!

c# firebase unity3d firebase-realtime-database async-await
1个回答
0
投票

根据LoadScene()的Unity文档:

注意:由于在下一个渲染帧中将加载设置为完成,因此调用SceneManager.LoadScene会强制完成所有先前的AsynOperations,即使AsyncOperation.allowSceneActivation设置为false也是如此。这可以通过使用LoadSceneAsync来避免。

请尝试使用LoadSceneAsync。

© www.soinside.com 2019 - 2024. All rights reserved.