2012-06-09 4 views
2

У меня есть приложение wp7 с двумя фоновыми потоками: 1. Планирование времени 2. Воспроизведение разных образцов звука за счёт планируемого времени (Возможно, несколько образцов одновременно).Сделать фоновый поток в единстве3d

Как повторить эту логику с помощью двигателя united3d? Является ли это возможным?

ответ

3

Unity не позволит вам получить доступ к своим API-интерфейсам из любого потока, отличного от основного; вы не можете использовать блокирующие примитивы, чтобы обойти его.

Вы можете использовать стандартные API потоков .NET для запуска потоков, которые не взаимодействуют напрямую с Unity API. Вы могли бы рассчитать выборки и буферы на дополнительный поток, но ваш основной поток должен был бы вызвать AudioClip.SetData для отправки вычисленных образцов в Unity.

2

Тот факт, что API не поточно не означает, что вы не можете использовать его с дополнительной потокобезопасности Вам нужно только для того, чтобы не два. потоки изменяют общие данные одновременно. Вы можете использовать простую переменную блокировки, чтобы никто не читал список образцов во время его обновления.

Однако вместо потоков я бы рекомендовал использовать coroutines, поскольку они делают вещи намного проще. Нет необходимости в потоковой безопасности, преимущества аналогичны, а порядок выполнения намного яснее.

Простым способом достижения аналогичного решения было бы обновить список образцов внутри Update и прочитать его в методе LateUpdate.

+0

Ссылка сломана, теперь это; http://docs.unity3d.com/Manual/Coroutines.html –

+0

@StaffordWilliams Обновилась ссылка. Благодаря! – Elideb

Смежные вопросы