【问题标题】:Event listener not working with firebase query事件侦听器不适用于 firebase 查询
【发布时间】:2021-08-23 10:12:57
【问题描述】:

我正在尝试为我的 firebase 查询脚本创建一个事件侦听器,但它的行为有点奇怪?!?

这是我的脚本:

using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.Events;
using Firebase.Firestore;
 
public class TestDataHandler : MonoBehaviour
{
 
    public GameObject testObject;
 
    private void Start()
    {
        fbEvent.AddListener(readyToGo);
        GetUserData("12345");
    }
 
    void readyToGo()
    {
        Debug.Log("Do Stuff");
        tetsObject.SetActive(false);
        Debug.Log("Stuff Done");
    }
 
    UnityEvent fbEvent = new UnityEvent();
 
    public void GetUserData(string userId)
    {
 
        Query query = FirebaseDataManager.instance.users
            .WhereEqualTo("userId", userId
            );
 
        query.GetSnapshotAsync().ContinueWith(querySnapshotTask =>
        {
           
            if (querySnapshotTask.IsFaulted)
            {
                Debug.Log("No userdata is found");
            }
            else if (querySnapshotTask.Result.Documents.Count() < 1)
            {
                Debug.Log("No userdata is found");
            }
            else
            {
                DocumentSnapshot userData = querySnapshotTask.Result.Documents.FirstOrDefault();
                Dictionary<string, object> data = userData.ToDictionary();
 
                User tempUser = FirebaseSerializer.FBDataToObject(data) as User;
 
                Debug.Log("Userdata found: " + tempUser.firstName);
 
                fbEvent.Invoke();
            }
        });
    }
 
}

它有点工作,当然听者会听,但在这个例子中,我无法从听者返回函数中停用游戏对象。

我得到了“Do Stuff”日志,但没有得到“Stuff Done”日志并且游戏对象没有被停用?

我在这里错过了什么?

【问题讨论】:

    标签: c# firebase unity3d google-cloud-firestore event-listener


    【解决方案1】:

    顾名思义,GetSnapshotAsync 被执行 async ...意思是不同的Task(类似于线程)。 ContinueWith 是在 Task 完成后发生的保证在主线程上运行。

    Unity 的大部分 API 只能在 Unity 主线程中使用。

    对于 Unity,请确保不要使用 ContinueWith,而是使用扩展方法 ContinueWithOnMainThread,它还确保回调在 Untiy 主线程中执行,因此您可以使用 Unity API 而不会出现线程问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多