Работа с многочисленными одновременными звуками в единстве

Я написал специальный класс, который создает фиксированное количество источников звука. Когда воспроизводится новый звук, он проходит через класс, который создает очередь звуков, которые будут воспроизводиться во время этого кадра. Предпочтение отдается тем, что ближе к камере.

Если новые звуки поступают в следующий кадр, у меня есть сложный набор правил, который определяет, как заменить старые. В идеале «большие» или «важные» звуки не должны заменяться маленькими. Звуковая замена необходима, так как игра может быстро развиваться и должна пытаться воспроизводить новые звуки, заменяя старые. В противном случае могут быть «тихие» моменты, когда старый звук вот-вот перестанет играть и не будет заменен сразу новым звуком. Недостаток замены старых звуков сразу заключается в том, что происходит суровый переход от старого звукового клипа к новому.

Но мне интересно, могу ли я просто полностью удалить эту логику управления и создать аудио-источники «на лету» для новых звуков. Я мог бы дать «важные» звуки более приоритетными (ближе к 0 в соответствующем свойстве), а не менее важным, и пусть Unity позаботится о том, чтобы вырезать звуковые эффекты, превышающие ограничение канала. Единственным недостатком является то, что для этого требуется много распределений кучи.

Интересно, какую стратегию люди используют здесь?

5 голосов | спросил luxchar 17 PM000000100000000331 2014, 22:39:03

1 ответ


5
  

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

Не создавайте и не уничтожайте «многочисленные» источники звука на каждом кадре, вы просто замедляете игру. Выделение не является вашей единственной проблемой, но и сборщик мусора, пинающий, чтобы очистить вещи.

Продолжайте использовать постоянное количество источников звука и переключите старые звуки с новыми. Чтобы избежать того, что вы называете суровым переходом, добавьте плавный переходный эффект. Вы можете сделать больше, чем audioSource.sound = newSound;, чтобы изменить звук.

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

Другим примером может быть использование двух источников звука для одного перехода, а кроссфейд (громкость аудиоисточника 1 снижается, громкость источника аудиосигнала 2) между двумя различными звуковыми эффектами.

ответил 20 PM00000020000001931 2014, 14:32:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132