私は2つのバックグラウンドスレッドを持つwp7アプリを持っています:1。時間の計画2.計画された時間ごとに異なるサウンドサンプルを再生します(同時にいくつかのサンプルが可能です)。
unity3dエンジンでこのロジックを繰り返す方法は?出来ますか?
私は2つのバックグラウンドスレッドを持つwp7アプリを持っています:1。時間の計画2.計画された時間ごとに異なるサウンドサンプルを再生します(同時にいくつかのサンプルが可能です)。
unity3dエンジンでこのロジックを繰り返す方法は?出来ますか?
Unity では、メイン スレッド以外のスレッドから API にアクセスすることはできません。ロックプリミティブを使用して回避することはできません。
ただし、標準の .NET スレッド API を使用して、Unity API と直接対話しないスレッドを開始できます。追加のスレッドでサンプルとバッファーを計算できますが、メイン スレッドは AudioClip.SetData を呼び出して、計算されたサンプルを Unity に送信する必要があります。
Unity 2018.1 以降、特定の種類の計算タスクをバックグラウンド スレッドで実行できるようにするジョブ システムが導入されていることに注意してください (たとえば、変換位置の設定)。実行できるタスクは、時間の経過とともに徐々に開かれています。
API がスレッド セーフではないという事実は、追加のスレッド セーフを使用できないという意味ではありません。2 つのスレッドが同時に共通データを変更しないようにする必要があるだけです。単純なロック変数を使用して、更新中にサンプル リストを誰も読み取らないようにすることができます。
ただし、スレッドの代わりにコルーチンを使用することをお勧めします。スレッド セーフは必要ありません。利点は同様で、実行順序がより明確になります。
同様の解決策を実現する簡単な方法は、Update 内のサンプル リストを更新し、それを LateUpdate メソッドで読み取ることです。
まさか =( Unity API はスレッドセーフではありません:リンク