簡體   English   中英

等待 UnityMainThreadDispatcher 返回 Unity

[英]Wait for UnityMainThreadDispatcher to return Unity

我正在嘗試將尋路移至單獨的線程。 但是我仍然有 1 個 function 需要從搜索中每個節點的主線程調用。 我在這里找到了 UnityMainThreadDispatcher,它旨在通過在主線程上運行給定的操作來解決這個問題。 但是,在我從該操作返回值之前,我無法繼續我的 function。 這是我目前正在嘗試使用的代碼。當我調試此代碼時,回調中會返回一個有效的 returnVal,但是當我嘗試等待該值時,即使用 while 循環時,我被卡住了在一個無限循環中。 為什么是這樣?

var latlon = Vector2d.zero;

UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
    Debug.Log("Running on Main thread");
    _monoBehaviour.StartCoroutine(
        GetLatLonFromUnityCoords(point, returnVal => 
            {
                    latlon = returnVal;
                    Debug.Log($"Calculated latlon: {latlon}");
            }
    ));
    Debug.Log("Finished on Main thread");
});

while (latlon = Vector2d.zero) { }

// latlon has been returned, continue

我知道這樣做不好,我能做些什么呢? 謝謝

我嘗試了一些不同的 Unity 多線程插件,但體驗並不好。 我並不是說“UnityMainThreadDispatcher”不是一個好的解決方案,但如果 Unity 團隊解決了這個問題,似乎在多個線程上運行 Unity 特定功能將是一個更順暢、更好記錄的過程。 此外,如果可以提供幫助,最好避免包含額外的插件。 那說:

根據你的一個“我需要從主線程調用的函數”的內容,你可以將你的代碼分割成更模塊化的部分,並在觸發異步任務之間進行主線程調用。 例如,我有一個需要為用戶加載欄的繁重任務。 我創建了一個await Task.Run()構建的全局變量,然后我從主線程上的 Unity API 更新/檢索數據(包括更新進度條),然后我 go 進入下一個await Task.Run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM