Уроки Unity 3d

Обучение основам звуков в Unity

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

UnitySound-feature

Версия

C#3.5 Unity

Примечание: это руководство адаптировано для Unity 2018.

Создание визуальных элементов игры — это только половина работы. Как только вы создадите все объекты, монстров на своих местах и запустили все свои катапульты на поле боя, самая грандиозная битва может быть смешной, если при этом не будет звуковых эффектов.

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

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

В этом уроке вы узнаете:

  • В чем разница между AudioClips и AudioSources;
  • Как настроить различные свойства 3D-звуков;
  • Воспроизводить звуки в программе.

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

Примечание: вам нужно будет установить Blender, чтобы открыть проект, вы можете это скачать его здесь.

Введение

Вы можете скачать необходимые для создания проекта материалы в начале этой страницы. После этого откройте проект в Unity (минимальная версия 2018.2.10f1).

Для начала откройте главную сцену в папке AssetsRWScenes и нажмите кнопку Play.

Вы увидите несколько тракторов, которые катаются взад-вперед перед красным сараем. Если вы нажмете пробел, то ферма с животными запустится в воздух. Цель игры — завести животное в сарай, чтобы его не сбил трактор. Если животное получает удар от трактора, оно умирает.

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

Добавление первых звуковых эффектов

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

В проекте уже созданы префабы для каждого животного. В окне проекта откройте окно AssetsRWPrefabs и выберите префаб коровы.

Примечание: вы никогда не слышали о префабах? Почитайте урок, который называется Введение в Unity, чтобы освоиться.

Первое, что потребуется для данного префаба — это компонент AudioSource для воспроизведения звука. Находясь в окне Inspector нажмите кнопку «Add Component» и введите в поле «Audio Source». Затем выберите появившуюся опцию Audio Source, как показано на изображении ниже:

Префаб коровы теперь может воспроизводить аудио звуки, но для этого требуется аудиоклип (AudioClip). В настоящее время этот объект отсутствует.

Но что же такое AudioSource и чем он отличается от AudioClip?

Как в Unity работают звуковые эффекты

Для воспроизведения звуков в Unity вы будете использовать функции AudioSource и AudioClip.

AudioSource — это то, что фактически воспроизводит звук в 2D или 3D пространстве. В трехмерном пространстве громкость звука может варьироваться в зависимости от того, насколько далеко AudioSource находится от объекта, который его должен слышать (AudioListener, который в этой игре находится непосредственно на камере).

Вы можете настроить AudioSource для воспроизведения звука в 2D-пространстве по своему усмотрению, что означает, что он может воспроизводиться на постоянной громкости независимо от расстояния до AudioListener.

AudioClip — это аудиофайл, который AudioSource будет воспроизводить.

Важно отметить, что AudioSource при этом является компонентом. Это означает, что это объект, который унаследован от класса Unity MonoBehaviour и он может быть присоединен непосредственно к любому объекту типа Unity GameObject.

При этом AudioClip является переменной, которая может быть установлена в AudioSource (то есть каждый AudioSource может иметь один AudioClip). Вы можете прикреплять компоненты через редактор Unity или использовать для этой цели специальный код. В этом уроке вы будете использовать только редактор.

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

Примечание: Если вам интересно узнать, как работают триггеры, обратитесь к уроку, который называется Физическая система Unity.

Добавление аудиоклипов

Откройте папку AssetsRWSounds в окне «Project» и найдите звуковой файл moo. Убедитесь в том, что в Инспекторе все еще выделен префаб коровы и перетащите звуковой файл moo на аудиоклип (AudioClip).

Убедитесь, что Play On Awake включен.

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

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

  1. Выделите префаб барана и находясь в окне Inspector нажмите кнопку «Add Component». Теперь вам нужно выбрать компонент AudioSource в категории Audio.
  2. Перетащите звуковой файл baa в поле AudioClip.
  3. Убедитесь, что флажок Play On Awake установлен.
  4. Выделите префаб свиньи и находясь в окне Inspector нажмите кнопку «Add Component». Вам также нужно выбрать компонент AudioSource в категории Audio.
  5. Перетащите звуковой файл oink в поле AudioClip.
  6. Убедитесь, что флажок Play On Awake установлен.

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

Звук не воспроизводится?

AudioSource может воспроизводить самые разные форматы файлов, включая распространенные форматы .mp3 и .wav. Если у вас случится ситуация, что ваш звуковой файл не воспроизводится, сначала проверьте, поддерживается ли формат этого файла.

Примечание: При выборе формата звука, который вы хотите использовать, лучше всего выбирать файлы без потери качества звука, такие как .ogg или .wav.

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

Поскольку в рамках этого урока все файлы подготовлены и проверены заранее, то проблем с воспроизведением звуков возникнуть не должно. Однако, если звуки все-таки не воспроизводятся, то вам нужно проверить следующее:

  1. Не установлена ли слишком низкая громкость? Проверьте уровень громкости на каждом из AudioSources.

  1. Не отключили ли вы компонент AudioSource? Если компонент отключен, то соответственно он не будет воспроизводить звук.

  1. Проверьте стоит ли флажок Play On Awake. Звук будет воспроизводиться в том же кадре, в котором создан объект.

Настройка звуков

Пока что все выглядит отлично — все животные издают звуки, когда летят к сараю, однако до сих пор не хватает нескольких важных вещей:

  • Тракторы не издают никаких звуков.
  • Нет звука победы, когда животное успешно добирается до сарая.
  • Нет звука неудачи, когда животное попадает под трактор.

Добавление этих звуков придаст этой игре завершенности.

Добавление звуков трактора

Чтобы добавить жужжащий звук к тракторам при их движении вперед и назад, сначала удерживайте Cntrl (на ПК) или Command (на Mac) и выберите все три трактора в окне Hierarchy. Теперь вам нужно добавить AudioSource и звук трактора аналогичным образом, как вы это делали для озвучки животных. Не забудьте проверить чтобы Play On Awake был отмечен.

Когда для всех тракторов будут назначены соответствующие звуки, нажмите кнопку Play.

Конечно замечательно, что у всех тракторов есть звук, но их сложно различить, к тому же эти звуки заглушают все остальное и немного нервируют своей громкостью.

Как упоминалось ранее, 3D-звуки могут воспроизводиться с уменьшением громкости, чем дальше AudioListener (в этой игре он находится на камере) от AudioSource. Добавление эффекта спада (чем дальше тракторы от камеры, тем они тише) сделает их звучание намного лучше.

Нажмите на трактор в Hierarchy и в окне Inspector найдите компонент AudioSource. Там будет выпадающая область под названием 3D Sound Settings. Здесь вы можете установить параметры Doppler Level, а также значения для переменных Rolloff и Distance.

Doppler Level — это интенсивность звука, которая может быть изменена. Rolloff Level — это то, насколько громкость уменьшается, в зависимости от того, насколько дальше находится источник от AudioListener.

Сейчас у вас должен быть выбран ближайший к игроку трактор, поэтому его звук должен быть более громким, чем у двух других. Установите для параметра Volume Rolloff значение Linear Rolloff, что сделает эффект более выраженным. Затем установите значение для Min Distance = 1 и Max Distance = 9. Doppler Level должен быть равен 0,68.

Это сделает звук переднего трактора более громким, когда он будет приближаться к середине экрана, и тише, когда он будет двигаться за пределы экрана. Нажмите Play, чтобы проверить все ли работает.

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

Чтобы уменьшить интенсивность звука задних тракторов нужно:

  1. Выбрать tractor2 в Иерархии.
  2. Установить для параметра Volume Rolloff значение Linear Rolloff.
  3. Установить значение для Min Distance = 1 и Max Distance = 30.
  4. Doppler Level должен быть равен 0,68.
  5. Выбрать tractor3 в Иерархии в иерархии и установить для параметра «Volume Rolloff» значение «Linear Rolloff».
  6. Установить значение для Min Distance = 1 и Max Distance = 50.
  7. Doppler Level должен быть равен 0,68.

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

Однако тарахтение тракторов по-прежнему звучит слишком громко, особенно когда они едут одновременно. Чтобы это исправить установите ползунок громкости на их AudioSource = 0,4.

Если вы будете играть в эту игру более 40 секунд, то заметите, что звуки трактора отключаются спустя это время. Это происходит потому, что их AudioSource не был установлен на определенный цикл. Чтобы это изменить, установите флажок «Loop» для каждого компонента AudioComponent каждого трактора.

Добавление звуков ударов

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

Для начала вам необходимо прикрепить AudioClip звука смерти к компоненту «Tractor». Для этого:

  1. Нажмите Cntrl (на ПК) или Command (на Mac) и в меню Hierarchy выберите сразу три трактора.
  2. Теперь выберите три объекта GameObject для трактора и отметьте галочкой поле «Death Sound» компонента «Tractor» в Инспекторе.
  3. Далее вам нужно выбрать звуковой файл смерти из всплывающего окна «Select Audio Clip», как показано ниже.

Чтобы кодировать звук смерти животного, начните с двойного щелчка на скрипте TractorC#, чтобы открыть его в редакторе (находится в папке Assets\RW\Scripts). Перед закрывающей скобкой if добавьте следующий код:

audioSource.PlayOneShot(deathSound);
Конечный результат должен выглядеть так:

void OnCollisionEnter(Collision col)

{

    if (col.gameObject.GetComponent<Animal>() && !col.gameObject.GetComponent<Animal>().isDead)

    {

        Destroy(col.gameObject);

        audioSource.PlayOneShot(deathSound);

    }

}

Нажмите Control-S (на ПК) или Command-S (на Mac), чтобы сохранить изменения в коде.

PlayOneShot () воспроизводит звук один раз. Вы передаете звук, который ранее добавили к трактору, а затем воспроизводите его один раз. Причина, по которой трактор (а не животное) должен воспроизводить этот звук, заключается в том, что при ударе трактора по животному GameObject, который является животным, удаляется. Так как он больше не существует, животное не может воспроизводить звук. Преимущество использования PlayOneShot () состоит в том, что звук воспроизводится до конца, даже если PlayOneShot () вызывается снова.

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

Добавление звука удачного попадания

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

  1. Выбрать в меню Hierarchy сарай.
  2. В Инспекторе добавить к нему компонент AudioSource.
  3. Перетащить звук победы из AssetsRWSounds в поле AudioClip.

На этот раз убедитесь, что Play On Awake выключен. Таким образом звук будет воспроизводиться только в том случае, если животное попадает в сарай.

Дважды щелкните по скрипту Barn в разделе AssetsRWScripts.

Под открывающей скобкой if добавьте следующее:

if(col.gameObject.GetComponent<Animal>())

Конечный результат должен выглядеть так:

void OnCollisionEnter(Collision col)

{

    if(col.gameObject.GetComponent<Animal>())

    {

        GetComponent<AudioSource>().Play();

        Destroy(col.gameObject);

    }

}

Последние штрихи: различные звуковые эффекты

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

Для этого откройте скрипт AnimalC# в папке Scripts и добавьте следующие данные прямо под public bool isDead = false:

void Start()

{

    AudioSource audioSource = GetComponent<AudioSource>();

    audioSource.pitch = Random.Range(0.8f, 1.5f);

    audioSource.Play();

}

Этот код выбирает компонент AudioSource и устанавливает переменную основного тона в случайное значение между 0,8 и 1,5. Теперь нажмите Play и попробуйте запустить животных. Их звуки будут каждый раз разными.

Что делать дальше?

Теперь вы можете самостоятельно присваивать звуки различным объектам в Unity и использовать эти знания в дальнейшем при создании собственных игр.

Попробуйте также добавить различные высоты для каждого из тракторов. Вы также можете попробовать добавить разные звуки животных и уникальный звук смерти для каждого животного.

Перевод
Оригинал на англ.
Показать еще

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

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

Back to top button