запуск звука через скрипт unity

Воспроизведение и управление звуками в Unity 3D (Sound complete event, Play in edit mode)

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

Скрипт работает одинаково как в PlayMode так и в EditMode, и позволяет:
1. Воспроизвести звук с необходимой задержкой и отследить начало воспроизведения.
2. Отследить окончание звука, в том числе каждый момент завершения зацикленного воспроизведения.
3. Отследить незапланированное окончание воспроизведения звука.
4. Использовать событие для отслеживания и изменения параметров в процессе воспроизведения.

Для воспроизведения звука используются статические методы:

Эти методы возвращают экземпляр класса SoundTrack, к которому в последствии можно прикрепить необходимые события. Первый метод создаёт на сцене GameObject, второй добавляет указанному GameObject компоненты SoundTrack и AudioSource.

Параметры volume и pitch не нуждаются, наверное, в представлении.

loopTime – можно использовать для задания времени в секундах, которое будет длиться цикл воспроизведения. При значении 0 звук проиграется только один раз, при значении float.PositiveInfinity звук будет проигрываться бесконечно.
delayTime – это задержка перед воспроизведением звука в секундах.

Примечание:
По прошествии loopTime, первый метод удалит созданный для звука GameObject, второй метод удалит только созданные для звука компоненты.

Итак, самый простой пример кода для воспроизведения звука в игре.

И для воспроизведения звука в редакторе.

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

Данный пример запускается сочетанием клавиш SHIFT+F1, и показывает как использовать события.

Для того чтобы пример работал, этот скрипт надо положить в папку Editor, а так же иметь в ресурсах проекта хотя бы один звуковой файл. Если нужен тест в запущенном проекте, то можно просто из функции TestSound перенести код в функцию Start, и если нужно, то сделать все свойства и метода нестатическими.

Это событие срабатывает непосредственно при начале воспроизведения звука.

Т.е. в случае, если delayTime > 0, оно сработает не при создании звука, а при старте воспроизведения.

Это событие может быть полезно в ряде случаев.

К примеру можно музыке и эффектам задать разные события, и одной переменной регулировать громкость всей музыки в игре, а другой всех эффектов. А потом добавить и эффектам и музыке ещё одно событие, в котором уже регулировать скорость их воспроизведения, если в игре есть эффект Slow Motion.
В данном примере звук должен в течении каждой секунды менять громкость.

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

Это событие сработает в 2-х случаях. Первый случай, это когда воспроизведение звука завершено, по истечении loopTime или при одноразовом воспроизведении. Второй случай, это никак не связанное с логикой скрипта удаление звука со сцены (например вручную удалив объект из иерархии сцены). Отличить один случай от другого можно с помощью параметра atEndOfSound, если он равен false, то это как раз второй случай.

Во втором случае мы уже не будем иметь доступ к GameObject’у и компонентам звука.

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

Всё время расчитывается относительно Time.realtimeSinceStartup.

Здесь можно скачать сам скрипт и приведённый выше пример.

Если в примере не работает сочетание клавиш, можно найти пункт TestSound в меню.

Если Unity не находит звук в ресурсах, надо его просто выделить (посмотреть настройки аудиофайла).

Источник

Unity3D — кроссфейд, основы работы со звуком (урок)

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.
картинка для привлечения внимания:
«Acorn» — игра, над которой мы работаем,
в ней используется скрипт из этого урока.

В уроке быстро и просто реализуем примерно три задачи:

10 секунд до своего финала, должны плавно затухать и плавно переходить с усилением в собственное начало.
Другими словами — «программное» плавное смешивание (луп/микширование/закольцованность, etc.) на лету.

… как это понимаю «дилетант я»?

Вот, например, скриншот из Adobe Audition.

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.

Берём трек (0), делаем возрастание громкости вначале (1) и затухание в конце (2),
клонируем результат в начало (3) и в конец (4), со смещением до перекрестия затуханий (5), обрезаем лишнее (6).
7 — Сохраняем результат.

Почему я делаю это программно?

Немного необязательной информации под спойлером.

Микширование в Unity 5.0 через AudioMixer это, наверное, круто.
Но нужно было собственное решение здесь и сейчас (на момент написания урока — версия 4.5.2f1).
Итак, начнём по порядку.

0. Подготовительные работы

1. Плавное затухание эмбиента предыдущего уровня при переходе на следующий.
Последующее удаление через заданное количество времени

Создаём новый js скрипт, люблю дурацкие названия — назову его FadeOutAndDestrTimerWhenNextLvlLoad

Первое, что нам нужно — чтобы объект «звук» не уничтожился при переходе на следующий уровень.
Зачем? Затем, чтобы сделать ему плавное затухание и затем удалить.

Лезем читать документацию.

Ага, нам нужна строчка:
Всё, этого достаточно.

Исходя из наших требований, обдумываем три «изменябельных» переменных:

Ага, значит далее скрипт будет состоять из двух функций — «таймер удаления» и «механизм затухания».

Начнем с «таймера удаления».
Тут все элементарно:

Если номер загруженного уровня будет соответствовать указанному нами в окошке «levelToExecute», запускается «таймер удаления» — от момента загрузки уровня до времени, указанного нами в окошке DestroyTime.

Хм, а почему бы нам не добавить сразу и запуск (ещё не написанной) функции «механизм затухания» сюда же? Можно.

Теперь осталось написать функцию «механизм затухания», допустим такой метод:

Вот, что у нас получилось:

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.

2,3 «Программный» луп эмбиента с самим собой, плавное усиление эмбиента при загрузке уровня

Мы уже знаем почти все, что нужно для этой части.
Добавим чуть-чуть.

Создаём новый js скрипт, я назову его StartFadeIn_CloneTimer_FadeOut_DestrTimer
Обратите внимание — название не просто дурацкое, в нем указана последовательность исполнения функций, мне так удобно.
Кстати, изначально я написал п.1 и п.2-3 в один скрипт, но оказалось удобнее отключать «кусочек» при потребности.
Можете их объединить, чуть подкорректировав.

Оглянемся назад, в начало статьи — какие требования предъявлены будущему скрипту?
Музыка, за

N секунд до своего финала, должна начать плавно затухать и плавно переходить с усилением в собственное начало.

Подумаем как это реализовать:

Добавим функцию «Старт»:

Теперь по порядку, добавим перечисленные выше функции. Клонирование:

Функция «Фейд» у нас уже есть — копипастим её из первой части статьи:

Вот, что у нас получилось:

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.

Смотрим длину нашего трека, конвертируем её в секунды = DestroyTime
Если лень посчитать — можно использовать онлайн-конвертер минут (гугл в помощь) + добавить остаток секунд.
Отнимаем продолжительность фейда = CloneTime
Вписываем полученные значения в окошки.
В перфаб добавляем нужный трек.
Фейд по вкусу.

Вы должны проследить за тем, чтобы задержка до клонирования/продолжительность фейда/время удаления
не конфликтовали с временнЫми параметрами скрипта из первой части статьи
иначе при переходе на следующий уровень трек может не успеть самоудалиться и начнёт создавать множество своих копий.

И напоследок, если вам интересно, для чего это делается:

Источник

Sound Manager для небольших игр и прототипов на Unity

Воспроизвести звук в Unity просто. Нужно создать компонент AudioSource прикрепить к нему звуковой файл в виде AudioClip и вызвать audioSource.Play() из скрипта. Или даже поставить автовоспроизведение на при создании объекта(Play on Awake).

Сложности начинаются когда звуков в игре становится много. Их все нужно расставить, прописать приоритеты. Звуки отдельно, музыку отдельно. При регулировке громкости звуков и музыки раздельно тоже сложности. Можно, конечно, регулировать громкость разных каналов в AudioMixer, но он не работает в WebGL. А Webplayer сейчас считается устаревшим.

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

В общем хочется простой и удобный SoundManager, создание которого я и опишу. Для крупных проектов он не подойдет, а вот для прототипов и небольших игр вполне.

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.

Итак что же должен представлять собой SoundManager? Ну во первых им должно быть удобно пользоваться. То есть никаких «найти объект на сцене», «присоеденить компонент» и прочего для пользователя, все внутри. Так что сразу делаем его синглтоном(Код сокращен, чтобы выделить суть).

Теперь менеджер сам создаст себя на сцене, так что добавлять его самостоятельно не нужно(и не рекомендуется). Создается он по префабу, путь до которого прописан в коде, так что перемещать префаб не стоит. Можно создавать и с помощью new GameObject() и AddComponent() если хочется. UPD. Теперь создается не по префабу. Кроме того объект сразу помечается с помощью DontDestroyOnLoad. Нужно это для того чтобы музыка и звуки продолжали играть без перебоев при перезагрузках сцен.
Теперь к любым методам можно обращаться просто написав SoundManager.Instance.Method(). Чтобы еще немного сократить эту запись для всех методов я дописал статический враппер:

Так что писать можно даже еще короче SoundManager.Method().

Объект есть, работать с ним удобно. Дальше добавляем функциональность. Самая необходимая функция это PlaySound:

Для начала несколько проверок звука. Что он не пустой и что таких звуков не стало слишком много(Если где то в цикле по ошибке вызывается). После чего загружаем звук из ресурсов, ждем загрузки, создаем новый объект на сцену, добавляем AudioSource, настраиваем его и запускаем. Функция LoadClipAsync запускает асинхронную загрузку звукового файла из ресурсов по имени. Так что файл надо будет положить в папку «Resources/Sounds/Sounds». Создание объекта происходит по префабу, который загружен из ресурсов. Так что часть параметров(вроде приоритета звука), можно установить префабу из инспектора. Громкость устанавливается так же у каждого объекта отдельно. В отличие от установки громкости AudioListener-у это позволяет регулировать громкость звуков и музыки раздельно. Сохраним объект в списке звуков _sounds, чтобы иметь возможность регулировать его громкость и уничтожать по окончанию.

Параметр pausable нужен чтобы разделить UI звуки и игровые звуки. Первые должны играться всегда и никогда не ставиться на паузу. Вторые приостанавливаются во время паузы и продолжаются при возобновлении игры. Делается это автоматически с помощью флага soundSource.ignoreListenerPause, который почему то недоступен из Inspector-а.

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

В большинстве неболших проектов достаточно одного трека проигрывающегося в данный момент, так что запуск новой музыки останавливает предыдущие треки автоматически, так что на каждой сцене достаточно вызвать лишь SoundManager.PlayMusic(«MusicForCurrentScene»); Кроме того при создании и остановке музыки добавляется плавное нарастание громкости и плавное угасание. Это позволяет сделать переход плавным и не бьет по слуху. Само плавное изменение громкости можно делать Tween-ом, но можно и ручками, чтобы было меньше зависимостей.

Дальше нам нужна возможность поставить паузу. Так как у всех звуков уже проставлена настройка ставятся ли они на паузу при паузе AudioListener-а, то методы получаются очень простыми.

Либо можно настроить автоматическое включение паузы.

Дальше нам потребуются методы установки и получения громкости.

Тут все просто. Сохраняем и читаем настройки с помощью PlayerPrefs, при изменении пробегаемся по звукам и применяем новую громкость. Аналогично можно сделать настройку mute и все тоже самое для музыки.

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

запуск звука через скрипт unity. image loader. запуск звука через скрипт unity фото. запуск звука через скрипт unity-image loader. картинка запуск звука через скрипт unity. картинка image loader. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.

Плюсы полученного менеджера:
+ Простота в использовании
+ Чистый код и объекты сцены. Не нужно вешать компоненты звука нигде, искать и вызывать их из кода
+ Музыка, которая не прерывается при загрузке сцены и меняется плавно
+ Геймплейные и UI звуки
+ Поддержка паузы
+ Поддержка AudioMixer
+ Работа на всех платформах, включая не поддерживающие AudioMixer (например WebGL)
+ Поддержка голоса рассказчика(в статье не упомянуто, но в полном коде реализовано)

Ограничения текущей реализации(Пока нету):
— Пока нет позиционного 3d звука
— Изменения pitch-а звука, чтобы много кратное повторение одинаковых звуков не приедалось
— Загрузка звука при использовании может приводить к лагам(Незаметно на мелких проектах и небольших звуках)
— Нет регулировки громкости отдельно взятого звука
— Нет зацикленных звуков, вроде амбиента

Источник

Аудио. Обзор.

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

Основная теория

In real life, sounds are emitted by objects and heard by listeners. The way a sound is perceived depends on a number of factors. A listener can tell roughly which direction a sound is coming from and may also get some sense of its distance from its loudness and quality. A fast-moving sound source (like a falling bomb or a passing police car) will change in pitch as it moves as a result of the Doppler Effect. Also, the surroundings will affect the way sound is reflected, so a voice inside a cave will have an echo but the same voice in the open air will not.

запуск звука через скрипт unity. AudioSourceListDiagram. запуск звука через скрипт unity фото. запуск звука через скрипт unity-AudioSourceListDiagram. картинка запуск звука через скрипт unity. картинка AudioSourceListDiagram. К этой статье будет приложен небольшой, но полезный csharp скрипт, и показано как им пользоваться. Поводом для написания скрипта стало то, что появилась необходимость в настройке и тестировании звуковых эффектов не запуская сцены проекта. А так же в отслеживании основных событий воспроизведения.Audio Sources and Listener

Для имитации эффектов расположения, Unity требует, чтобы звуки исходили из компонентов Audio Source, прикреплённых к объектам. Затем, испускаемые звуки “ловятся” компонентом Audio Listener, прикреплённым к другому объекту, чаще всего, к камере. Затем Unity может имитировать эффекты расстояния и пространственного положения источника от слушателя и проигрывать их для пользователя соответствующим образом. Относительная скорость объектов источника и слушателя также может быть использована для имитации эффекта Допплера для дополнительной реалистичности.

Unity не может рассчитать эхо только исходя из геометрии сцены, но вы можете имитировать его, добавив к объектам аудио фильтры (Audio Filters). Например, вы могли бы применить Echo фильтр к звуку, который предназначен для звучания из пещеры. В случаях, когда объекты могут двигаться внутрь и наружу из области сильного эхо, вы можете добавить в сцену зону реверберации (Reverb Zone). Например, в вашей игре автомобили могут проезжать по туннелю. Если вы расположите зону реверберации внутри туннеля, звуки двигателей автомобилей начнут отдаваться эхом в момент заезда в туннель и эхо прекратится, когда они будут выезжать с другой стороны туннеля,

The Unity Audio Mixer allows you to mix various audio sources, apply effects to them, and perform mastering.

На страницах руководства по Audio Source, Audio Listener, аудио эффектам и зонам реверберации можно найти дополнительную информацию о многих настройках и опциях, доступных для получения нужных эффектов.

Работа с аудио ассетами

Unity может импортировать файлы в форматах AIFF, WAV, MP3 и Ogg тем же путем, что и другие ресурсы, просто перетаскиванием файлов в панель Project. Импортирование аудио файла создаёт аудио клип (Audio Clip), который можно перетащить на источник звука (Audio Source) или использовать из скрипта. Страница справки по Audio Clip содержит больше информации об опциях импортирования, доступных для аудио файлов.

Для музыки, Unity также поддерживает трекерные модули, использующие короткие аудио-сэмплы в качестве “инструментов”, которые в дальнейшем упорядочиваются в мелодию. Трекерные модули могут быть импортированы из .xm, .mod, .it, и .s3m файлов, и использоваться как обыкновенные аудио-клипы.

Запись аудио

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

Источник

Воспроизведение звука в Unity и добавление музыки в приложение

Итак, вы создали собственную игру на Unity и хотите добавить воспроизведение звуков, чтобы немного оживить игру, потому что добавить звуковое сопровождение — эт о та к ж е важно, как и создать визуальную часть проекта.

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

Добавить воспроизведение звука в Unity можно 2-мя способами:

При помощи визуального редактора, который делает процесс добавления звуков довольно простым.

Используя специальные коды для аудио оформления игры.

Воспроизведение звука в Unity

Процесс добавления звуков в Unity одинаков для 2D и 3D. Разница будет лишь при настройк е звуков и при присваивании их объектам.

В Unity есть такое понятие как AudioSource — это источник звука. Именно он воспроизводит звуки в игровых сценах. Но воспроизводит он не просто звуки, а Audio Clip, которые нужно добавить в игру.

Как создать источник воспроизведения звука в Unity

Чтобы создать собственный «источник звука», нужно проделать следующие манипуляции:

Нужно импортировать звуки или мелодии в свой игровой проект на Unity в папку Assets. При этом не забывайте об авторских правах импортируемых мелодий.

Потом нужно пройти по следующему пути в меню: GameObject-CreateEmp t y.

Выделите созданный GameObject, потом в меню пройдите по следующему пути: Component-Audio-AudioSource.

Задайте «аудиоклип» к выбранному компоненту «аудиоисточника».

Когда нужно создать AudioSource, используя только один «аудиоклип» из вашей папки Assets, то это можно сделать путем простого перетаскивания клипа в окно сцены. Таким образом GameObject с компонентом «аудиоисточника» создастся в автоматическом режиме. Когда клип перетаскивается на уже созданный «игровой объект», то на нем автоматически создается новый AudioSource. А если на GameObject уже есть компонент «аудиоисточника», то он будет заменен на тот, который вы перетаскиваете.

Как добавить музыку в Unity

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

Уникальность мелодии можно достичь следующим образом:

приобрести ее за деньги с гарантией, что она уникальна;

заказать у знакомых музыкантов звуковое сопровождение вашей игры;

воспользоваться бесплатными аудиобанками;

запишите мелодию самостоятельно.

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

найти подходящую песню на специальных ресурсах, где она распространяется с открытой лицензией;

поискать музыкантов-любителей, которые не прочь запечатлеть свое творчество в вашей игре;

Заключение

Мы рассмотрели самый простой способ добавить проигрывание звука в игру на Unity. При добавлении звуков вам будет предложено много различных настроек. Не бойтесь экспериментировать. А пока ловите несколько советов, чтобы воспроизведение звука на Unity радовало ухо:

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

Если звук искажается при движении персонажа, то обратите внимание на параметр Doppler Level в AudioSource и от регулируйте его до нужного состояния звука или уберите его совсем «в ноль», чтобы звук вообще не искажался.

Если нужна фоновая музыка, то лучше ее обыгрывать на ближайшем к AudioListener объекте.

Чтобы фоновая музыка проигрывалась без проблем, то снимите галочку с «3D Sound» в самом аудиофайле.

При добавлении звуков обращайте внимание на галочку «3D Sound» — она нужна, когда наша игра в 3D ; если ваша игра в 2D, тогда снимите ее.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *