Как сделать звуки в игре unity

Обновлено: 15.05.2024

Эта страница содержит ссылки на ресурсы для пространственного звука в Unity.

Параметры спатиализер

Параметры спатиализер для приложений смешанной реальности включают:

  • Unity предоставляет спатиализер MS хртф в составе дополнительного пакета Windows Mixed Reality .
    • Работает на ЦП в архитектуре с одним источником с более высоким значением.
    • предоставляется для обеспечения обратной совместимости с исходными приложениями HoloLens.
    • Использует более экономичную архитектуру с несколькими источниками.
    • Перегружается на аппаратный ускоритель на HoloLens 2.

    Для новых приложений мы рекомендуем использовать Microsoft спатиализер.

    Включить пространственность

    используйте NuGet для Unity , чтобы установить microsoft. спатиалаудио. спатиализер. Unity , и выберите microsoft спатиализер в параметрах звука проекта. Затем сделайте следующее:

    • Присоединение звукового источника к объекту в иерархии
    • Установите флажок " включить пространственность "
    • Переместить ползунок пространственного смешения в "1"
    • Убедитесь, что на рабочей станции разработчика включен Пространственный звук.
      • Щелкните значок тома на панели задач правой кнопкой мыши и убедитесь, что для пространственного звука задано значение, отличное от "Выкл.".
      • выберите Windows Sonic для наушников , чтобы получить лучшее представление о том, что вы слышите HoloLens 2.

      Дополнительные сведения см. в разделе:

      Затухание, связанное с расстоянием

      По умолчанию Unity на основе расстояния Decay имеет минимальное расстояние в 1 метра и максимальное расстояние 500 метров с логарифмической роллоффой. Эти параметры могут работать в вашем сценарии, или вы обнаружите, что источники слишком быстро или слишком медленные. Дополнительные сведения см. в разделе:

        для рекомендуемых параметров.
      • В документации по источнику аудио в Unity приведены инструкции по установке этих кривых.

      Переглагол

      По умолчанию Microsoft спатиализер отключает эффекты после спатиализер. Для включения переглагола и других эффектов для пространственных источников:

      • Присоединение компонента уровня отправки "воздействие комнаты " к каждому источнику
      • Настройте кривую на уровне отправки для каждого источника, чтобы управлять усилением звука, отправляемого обратно в граф для обработки эффектов.

      Примеры пространственных звуков Unity

      Примеры пространственного звука в Unity см. в следующих статьях:

      Следующий этап разработки

      Если вы пойдете из процесса разработки Unity, который мы собрали, то будете изучать основные строительные блоки в смешанной реальности. Отсюда вы можете перейти к следующему стандартному блоку:

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

      Для работы нам понадобится условная моделька персонажа. Сделать ее достаточно просто. На пустой объект вешаем капсульный коллайдер, затем удочеряем камеру, поднимаем на уровень головы и всё.

      Далее, в проекте должна быть папка Resources. В ней у нас будут хранится звуки. Мы будем использовать загрузку массивов на старте сцены, потому как в процессе разработки, звуки могут меняться, можем добавлять новые или же удалять ненужные. И чтобы каждый раз не мучится с ручным заполнением массива, лучше делать это через скрипт в таких случаях.

      Создаем класс, который отвечает за загрузку и воспроизведение:

      Здесь есть меню, для выбора определенных звуков. Меню можно конечно расширить, если это нужно.

      Создаем скрипт управления:

      Цепляем его на модельку, которую мы сделали ранее. Автоматически будут добавлены все необходимые компоненты. Не забываем указать камеру в качестве головы нашего персонажа, так как вращаться мышкой будет именно этот объект. И само собой, так как у нас фильтр по тегам, то значит если в игре, например, металлическая площадка, то и тег ей ставим соответствующий.

      Воспроизведение событий FMOD (далее ивентов) в Unity не представляет особой сложности, но у нас есть ряд доступных методов, которые могут иметь больший или меньший смысл в зависимости от наших задач. В этом уроке я представлю обзор доступных методов для запуска и воспроизведения наших ивентов.

      Скачайте проект Unity & FMOD для этого руководства. Если после открытия проекта у вас возникнут какие-либо ошибки, удалите файл FMODStudioCache.asset, поскольку он содержит старый путь к проекту FMOD Studio.

      Видео версия туториала (на английском языке):

      Оглавление

      • Как мы можем проиграть ивенты (event) FMOD в Unity ?
      • Воспроизведение ивентов (events) FMOD с помощью компонента Studio Event Emitter
      • PlayOneShot
      • В чем разница между ивентом (event) и инстансом (instance) ?
      • Настройка воспроизведения и управление ивентами (events) FMOD вручную через код
      • Объявление инстанса у ивента FMOD
      • Создание инстанса у ивента FMOD
      • Воспроизведение инстанса ивента FMOD
      • Как проигрывать лупы (loop) с использованием FMOD и Unity?
      • Как остановить луп ивента FMOD в Unity?
      • Воспроизведение 3D-ивентов FMOD в Unity

      Как мы можем проиграть ивенты (event) FMOD в Unity ?

      Мы можем воспроизвести ивенты FMOD тремя различными способами:

      1. С помощью компонента FMOD Studio Event Emitter .
      2. Вызывая комплексную функцию PlayOneShot в коде.
      3. С объявлением запуска/остановки ивента в коде.

      Все эти способы имеют практические преимущества и недостатки:

      • Event Emitter позволяет нам воспроизводить ивента без кода. В сочетании с компонентом Studio ParameterTrigger можно дополнительно модулировать параметры ивента.
      • С помощью вспомогательной функции PlayOneShot мы можем воспроизвести ивент с помощью одной строки кода. FMOD автоматически выполняет воспроизведение и останавливает или освобождает инстанс (instance) звука из памяти. Недостатком этого метода является невозможность изменения параметров ивента. Если нужно изменить звук с помощью игрового параметра, PlayOneShot не подходит.
      • С другой стороны, ручная настройка воспроизведения ивентом требует большего количества кода, но является гораздо более гибким, поскольку можно точно определить, когда звук или цикл должны воспроизводиться и останавливаться, а также где должны выполняться модуляции параметров.

      Воспроизведение ивентов (events) FMOD с помощью компонента Studio Event Emitter

      Для простого воспроизведения ивентов мы создаем новый GameObject и вставляем компонент Studio Event Emitter в инспектор Unity :

      Здесь мы находим несколько настроек, с помощью которых мы можем влиять на воспроизведение ивентов. С помощью Play Event и Stop Event мы определяем, когда ивент должно быть активировано и остановлено. С помощью Event мы выбираем ивент из списка ранее созданных ивентов. Повключайте и выключайте этот GameObject , чтобы услышать, как работает звук.

      PlayOneShot

      Метод PlayOneShot мгновенно создает инстанс (экземпляр) ивента в определенном месте (по умолчанию источником будет GameObject ). Звук будет воспроизводиться полностью, и параметры не могут быть установлены, как в способе выше. Код для PlayOneShot :

      event:/Example - это путь, который относится к ивенту, которое мы создали в FMOD Studio. Пути следуют структуре папок в FMOD Studio, поэтому мы можем просто ввести их вручную в код. Кроме того, вы можете щелкнуть правой кнопкой мыши по ивенту в FMOD Studio, чтобы скопировать его путь.

      Полный код для использования функции PlayOneShot :

      Если вы теперь перейдете в режим воспроизведения и нажмете пробел, вы услышите звук, который вы добавили в ивент, созданный в FMOD Studio. В верхнем левом углу вы также увидите небольшое окно отладки, показывающее громкость в RMS и количество активных записей:

      В чем разница между ивентом (event) и инстансом (instance) ?

      Ивент(event) - это звуковые системы, созданный в FMOD Studio , который может содержать различные треки, параметры и автоматизацию. В игре создается копия или инстанс ивента. В игре запускается не сам ивент, а его инстанс (instance). Это позволяет одновременно воспроизводить несколько копий ивента.

      Чтобы вручную воспроизвести и управлять ивентом FMOD в Unity , необходимо выполнить четыре шага:

      1. Нам нужно объявить инстанс ивента FMOD
      2. Сообщить Unity , когда должен быть создан ивент FMOD и где этот ивент находится.
      3. Активировать и/или деактивировать инстанс ивента
      4. Выгрузить инстанс из памяти.

      Давайте теперь рассмотрим эти моменты шаг за шагом.

      Объявление инстанса у ивента FMOD

      Прежде чем продолжить, нам нужно объявить все ивенты, которые будут использоваться в этом скрипте в виде instance. В нашем случае мы вставим эту строку в код:

      Создание инстанса у ивента FMOD

      Затем в функции Unity Start() мы создаем инстанс для нашего ивента:

      Воспроизведение инстанса ивента FMOD

      После этого звук можно воспроизвести с помощью метода instance.start(). Я также поместил строку кода в метод Update() внутри оператора if , чтобы звук воспроизводился только при нажатии клавиши пробел:

      Если мы еще раз посмотрим на окно отладки FMOD в верхнем левом углу, вы, вероятно, заметите, что по сравнению с PlayOneshot при многократном нажатии клавиши пробела будет воспроизводиться только один инстанс ивента. Звук будет прерываться каждый раз, когда мы повторно нажимаем пробел. Это происходит потому, что мы создали инстанс в методе Unity Start(). Эта функция выполняется один раз при запуске игры. Если мы хотим иметь отдельный инстанс для каждого воспроизводимого звука, нам также необходимо поместить код создания инстанса в блок оператора if .

      Предупреждение: При использовании этого метода ручного запуска инстансы не выгружаются из памяти автоматически. Это может вызвать проблемы. Мы добавляем код instance.release() после запуска инстанса, чтобы он был выгружен из памяти после воспроизведения.

      Полный код этого примера:

      Как проигрывать лупы (loop) с использованием FMOD и Unity?

      Лупы ( loops ) можно безопасно выполнять и через метод ручного ввода. Но как создаются лупы и как их остановить?

      Вернемся в FMOD Studio и посмотрим на ивент LoopEvent в проекте. Вы можете создать луп-регион, щелкнув правой кнопкой мыши и выбрав Add Loop Region :

      Мы можем менять область лупа как угодно, аналогично функции loop в некоторых DAW . Мы изменим область лупа так, чтобы включить весь аудиофайл, сохраняем и генерируем проект.

      В проекте Unity запустите сцену Loop и нажмите пробел. Ивент будет воспроизводиться в непрерывном цикле.

      Как остановить луп ивента FMOD в Unity?

      Этой строчкой кода :

      мы можем остановить инстанс ивента. В функции Update () мы снова вставляем оператор if, который остановит наш звук, при нажатии на клавишу "левый контрол(CTRL)":

      STOP _ MODE.ALLOWFADEOUT учитывает время релиза ( release ) в ADSR модуляции ивента (если она есть). Если вместо этого мы хотим, чтобы звук немедленно прекратился, мы используем STOP_MODE.IMMEDIATE.

      Полный код для лупов такой:

      Теперь мы можем поочередно воспроизводить и останавливать наш звуковой луп с помощью клавиш пробел и левый контрол.

      Воспроизведение 3D-ивентов FMOD в Unity

      3D-ивенты отличаются от 2D-ивентов тем, что они воспроизводят 3D-звук с при помощи дополнительного эффекта Spatializer . Он меняет интенсивность громкости в зависимости от расстояния между FMOD инстансом и слушателем и панораму звучания в зависимости от положения звукового инстанса относительно слушателя.

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

      В FMOD Studio 2D-ивент можно легко преобразовать в 3D-ивент, добавив к мастер-треку эффект Spatializer:

      Теперь я кратко объясню наиболее важные настройки Spatializer :

      • Минимальное и максимальное расстояние (Min & Max Distance) и кривая ослабления расстояния (Distance Attenuation): эти свойства Spatializer определяют, насколько сигнал ослабляется на разных расстояниях. Сигнал не ослабляется, если слушатель находится на минимальном расстоянии от Spatializer, и становится "минус бесконечность" дБ, если слушатель вышел за пределы максимального расстояния, а также сигнал уменьшается по линейно-квадратичной кривой по мере того, как слушатель удаляется от минимального расстояния до максимального расстояния. Сигнал может изменяться по-разному, в зависимости от того как настроена кривая.
      • Envelopment: Envelopment определяет заполнение пространства звуковым ивентом на любом расстоянии от слушателя. В автоматическом режиме (Auto) минимальная ширина (expansion) устанавливается на 0 градусов, а для параметра о бъем звука (Sound Size) устанавливается значение, в два раза превышающее свойство минимальное расстояние Spatializer (Min-Distance Spatializer).
      • Пользовательский режим (User mode) позволяет нам вручную установить размер звука (sound size) и минимальное расширение (minimum expansion) Spatializer, в то время как режим Off отключает размер звука (sound size) и минимальное расширение (minimum expansion).

      В самом коде нам просто нужно внести небольшое изменение, то есть сообщить FMOD, где находится инстанс в трехмерном пространстве. У нас также есть два разных варианта. Или мы устанавливаем трехмерные атрибуты непосредственно в функции Update () объекта скрипт с этой строкой кода:

      Или мы добавляем информацию в объект GameObject после создания инстанса:

      В зависимости от того, имеет ли GameObject Rigidbody или нет, мы можем использовать один из двух методов. Второй метод использует Rigidbody для определения скорости GameObject и активации возможного эффекта Доплера.

      Код для 3D-ивента может быть записан как-то так:

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


      В качестве альтернативы вы можете перетащить файлы или целые папки в окно Проекта(Project), Unity сделает копию, а затем импортирует перетаскиваемые файлы:


      Существует три основных способа работы со звуком в играх Fungus. Это команды Audio, команда Say и gameObjects, содержащие компоненты Unity Audio Source. Все три обсуждаются ниже:


      Диапазон Команд аудио, которые вы можете добавить в Блок, следующие:


      Также вы можете объявить аудиоклип, который содержит речевой голос за кадром, чтобы соответствовать тексту, отображаемому с помощью Команды Say:


      Команда Play Music

      Музыкальные аудиоклипы зацикливаются, поэтому они перезапускаются после завершения воспроизведения. Часто первая команда в Блоке - это команда воспроизведения музыки. Добавьте музыку в Блок следующим образом:



      Команда Play Sound

      Команда Fungus Play Sound воспроизведет указанный аудиоклип один раз. Выбрав Блок Блок-схемы, нажмите кнопку Add в окне Инспектора и выберите в меню: Audio | Play Sound . Перетащите звуковой эффект (мы выбрали звук BearRoad из примера Hunter):


      Воспроизведите сцену, вы должны услышать, как ваш звуковой эффект проигрывается один раз.

      Заметка. Настройка по умолчанию Fungus заключается в том, что звуковой эффект начинает воспроизводиться, и во время его воспроизведения начинается выполнение следующей команды в Блоке. Однако, если вы установите флажок "Wait Until Finished" то Fungus будет ждать, пока звуковой эффект не закончится, прежде чем перейти к выполнению следующей Команды в Блоке:


      Команда Set Audio Volume

      1. (если вы этого еще не сделали: создайте новую сцену, добавьте к ней Блок-схему Fungus и выберите Блок на Блок-схеме).
      2. Переименуйте этот Блок в "Play Music".
      3. Добавьте Команду Play Music в текущий Блок, затем перетащите нужный файл музыкального клипа в свойство "Music Clip" в нижней половине окна Инспектор:








      3 концепции аудио Unity

      1. Audio Clip
      2. Audio Listener
      3. Audio Source

      Unity Audio Clip

      Unity использует термин Audio Clip для обозначения физических звуковых файлов (.mp3, .wav, .ogg и т. д.), Которые хранятся в папке вашего проекта. Именно эти файлы аудиоклипов можно перетаскивать в свойства "Music Clip" и "Sound Clip" в окне при создании Команд Play Music и Play Sound в Блоке Fungus.

      Unity Audio "Listener"

      Unity Audio Source

      В Unity связь между аудиоклипом (музыкой / звуком), который мы хотим воспроизвести, и аудиослушателем в сцене является компонентом Unity Audio Source для gameObject. Тем не менее, в большинстве случаев Fungus создает один из них при необходимости, поэтому нам не нужно беспокоиться о них!
      Тем не менее, для сложного управления музыкой, звуком и речью в вашей игре есть возможность, чтобы Fungus мог детально контролировать Unity Audio Sources. Это компонент Audio Source который управляет тем, как и когда и какая часть аудиоклипа воспроизводится (и должен ли он воспроизводиться в цикле или нет), а также воспроизводится ли он или находится в режиме паузы, и при возобновлении должен продолжаться с того места, где было приостановлено или перезапущено. Громкость воспроизводимого клипа также может контролироваться свойствами Audio Source.
      Узнайте больше об аудио в Unity на странице Unity Manual Audio Page.

      Команда Control Audio

      Fungus Команды Audio охватывают все распространенные действия с музыкой и звуковыми эффектами. Для работы со звуком специалиста вам может понадобиться доступ к raw (и сложным) возможностям. Fungus Команда "Control Audio" позволяет Блокам Fungus взаимодействовать напрямую с компонентами Unity Audio Source в любом gameObject текущей сцене, поэтому мастера вашей звуковой команды могут делать то, что им нужно, с помощью инструментария Unity, и вы по-прежнему можете контролировать игру / зацикливание / громкость и т. д. аудио в этих сложных gameObjects.
      Команда Control Audio предлагает пять действий, которые могут быть переданы компонентам Unity Audio Source:

      Читайте также: