首頁 > 後端開發 > C++ > 如何安全地從非序列線程調用Unity API函數?

如何安全地從非序列線程調用Unity API函數?

Mary-Kate Olsen
發布: 2025-01-31 12:01:09
原創
158 人瀏覽過

How to Safely Call Unity API Functions from Non-Main Threads?

從其他線程使用 Unity API 或在主線程中調用函數

問題

在單獨的線程中使用 Unity 的套接字 API 可能導致錯誤,尤其是在從子線程更新 UI 元素時。由於線程安全問題,從非主線程進行的 Unity API 調用會觸發異常。

解決方法

從線程調用 Unity API

實施以下步驟:

  1. 創建一個名為 actionQueuesUpdateFunc 的靜態 List<Action> 來存儲需要在主線程中執行的操作。
  2. actionQueuesUpdateFunc 複製到本地列表(actionCopiedQueueUpdateFunc)並執行這些操作。
  3. 創建一個易失性布爾值(noActionQueueToExecuteUpdateFunc)來指示 Update 函數何時有操作要執行。

調用主線程函數

要從單獨的線程調用函數:

<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // 在主线程中执行的代码
});</code>
登入後複製

或者,將函數作為參數傳遞:

<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 函数代码
}</code>
登入後複製

在主線程中運行協程

對於協程:

<code class="language-csharp">UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}</code>
登入後複製
登入後複製

使用方法

  1. Awake() 中初始化 UnityThread
<code class="language-csharp">UnityThread.initUnityThread();</code>
登入後複製
  1. Update 中執行代碼:
<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // Update 代码
});</code>
登入後複製
  1. Update 中執行方法:
<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 方法代码
}</code>
登入後複製
  1. LateUpdate 中執行代碼:
<code class="language-csharp">UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});</code>
登入後複製
  1. FixedUpdate 中執行代碼:
<code class="language-csharp">UnityThread.executeInFixedUpdate(() =>
{
    // FixedUpdate 代码
});</code>
登入後複製
  1. 啟動協程:
<code class="language-csharp">UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}</code>
登入後複製
登入後複製

附加說明

  • 為了提高性能,如果不需要,請註釋掉 ENABLE_LATEUPDATE_FUNCTION_CALLBACKENABLE_FIXEDUPDATE_FUNCTION_CALLBACK
  • 此解決方案對所有腳本使用單個 UnityThread 實例。

以上是如何安全地從非序列線程調用Unity API函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板