3

私は2つのバックグラウンドスレッドを持つwp7アプリを持っています:1。時間の計画2.計画された時間ごとに異なるサウンドサンプルを再生します(同時にいくつかのサンプルが可能です)。

unity3dエンジンでこのロジックを繰り返す方法は?出来ますか?

4

3 に答える 3

4

Unity では、メイン スレッド以外のスレッドから API にアクセスすることはできません。ロックプリミティブを使用して回避することはできません。

ただし、標準の .NET スレッド API を使用して、Unity API と直接対話しないスレッドを開始できます。追加のスレッドでサンプルとバッファーを計算できますが、メイン スレッドは AudioClip.SetData を呼び出して、計算されたサンプルを Unity に送信する必要があります。

Unity 2018.1 以降、特定の種類の計算タスクをバックグラウンド スレッドで実行できるようにするジョブ システムが導入されていることに注意してください (たとえば、変換位置の設定)。実行できるタスクは、時間の経過とともに徐々に開かれています。

于 2012-06-10T22:13:53.270 に答える
2

API がスレッド セーフではないという事実は、追加のスレッド セーフを使用できないという意味ではありません。2 つのスレッドが同時に共通データを変更しないようにする必要があるだけです。単純なロック変数を使用して、更新中にサンプル リストを誰も読み取らないようにすることができます。

ただし、スレッドの代わりにコルーチンを使用することをお勧めします。スレッド セーフは必要ありません。利点は同様で、実行順序がより明確になります。

同様の解決策を実現する簡単な方法は、Update 内のサンプル リストを更新し、それを LateUpdate メソッドで読み取ることです。

于 2012-06-09T22:09:45.077 に答える
0

まさか =( Unity API はスレッドセーフではありません:リンク

于 2012-06-09T09:38:49.980 に答える