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

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

Mary-Kate Olsen
リリース: 2025-01-31 12:01:09
オリジナル
235 人が閲覧しました

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 または、パラメーターとして関数を渡します:

メインスレッドの の使用方法

初期化

UnityThread.executeInUpdate(() =>
{
    // 在主线程中执行的代码
});
ログイン後にコピー

Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 函数代码
}
ログイン後にコピー

<执>:でコードを実行します

<执>:
UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}
ログイン後にコピー
で実行します

  1. <执>:Awake()でコードを実行します UnityThread
UnityThread.initUnityThread();
ログイン後にコピー
<执>:
    でコードを実行します
  1. Update
Coroutineの開始:
UnityThread.executeInUpdate(() =>
{
    // Update 代码
});
ログイン後にコピー
  1. Update追加の説明<附>
パフォーマンスを向上させるために、必要でない場合は、
Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 方法代码
}
ログイン後にコピー
    をコメントしてください。
  1. LateUpdateこのソリューションは、すべてのスクリプトに対して単一の
  2. インスタンスを使用します。
UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});
ログイン後にコピー

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート