課題:
バックグラウンドスレッドからUnityのAPI(UI要素の更新など)を直接操作すると、「GetComponentFastPathはメインスレッドからのみ呼び出されます」などのエラーが発生することがよくあります。 この記事では、Unityコンポーネントを更新しながら、セカンダリスレッドでコードを安全に実行するためのソリューションの概要を説明します。
解決策:スレッドセーフキューイング
UnityのAPIはスレッドセーフではありません。クラッシュを避けるために、キューを使用してオペレーションをメインスレッドに戻します。
メインスレッド用のアクションを保存するためのスレッドセーフキュー(など)を作成します。 デリゲートは、実行するコードを表します。Queue<Action>
Action
セカンダリスレッドから、キューにアクションを追加します。 キューを人種の条件から保護するためにステートメントを使用してください。
lock
メソッド(または同様のループ):
Update
キューにアクションが含まれているかどうかを確認します。
ベストプラクティス:
// Thread-safe queue private readonly Queue<Action> _actionQueue = new Queue<Action>(); // In your secondary thread: lock (_actionQueue) { _actionQueue.Enqueue(() => { // Code to update Unity API (e.g., textComponent.text = "Updated Text"); }); } // In your main thread's Update method: while (_actionQueue.Count > 0) { Action action; lock (_actionQueue) { action = _actionQueue.Dequeue(); } action.Invoke(); }
エラー処理:
潜在的な例外を処理するために、アクションをブロックにラップします。 メインスレッド処理のためのtry-catch
代替アーキテクチャ:以上がセカンダリスレッドからUnityのAPIに安全にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。