ホームページ >バックエンド開発 >C++ >非メインスレッドからUnity API関数を安全に呼び出す方法は?

非メインスレッドからUnity API関数を安全に呼び出す方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-31 12:01:09161ブラウズ

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

他のスレッドからUnityAPIを使用するか、メインスレッドの関数を呼び出します

質問 別のスレッドでは、UNITYのソケットAPIを使用すると、特にサブスレッドからUI要素を更新する場合、エラーが発生する場合があります。スレッドセキュリティの問題により、非メインスレッドから実行されるUnity API呼び出しは異常を引き起こします。

solution

unity api

に電話してください

次の手順を実装してください:

と呼ばれる静的

を作成して、メインスレッドで実行する必要がある操作を保存します。
  1. actionQueuesUpdateFunc をローカルリスト(List<Action>)にコピーし、これらの操作を実行します。
  2. 損失-Loss Boolean値()を作成して、関数が動作したときに実行するために機能を実行する時期を示します。 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
Coroutineの開始:
<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このソリューションは、すべてのスクリプトに対して単一の
  2. インスタンスを使用します。
<code class="language-csharp">UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});</code>

以上が非メインスレッドからUnity API関数を安全に呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。