Part 17 https://dzen.ru/a/Y84pq4I4dBVUGzx5
Теперь добавим диегетические звуки в игру, звуки у которых есть конкретный источник.
Начнем с шагов Джона Лимона. Откройте префаб JohnLemon из папки Assets > Audio. В окне проекта перейдите в Assets > Audio и мышкой перетащите клип SFXFootstepsLooping JohnLemon.
Несмотря на то, что это диегетический звук, вы все равно должны использовать Spatial Blend выставленный в 2D, чтобы громкость не менялась при перемещении Джона Лимона, поэтому оставляем настройку по умолчанию.
Но звук шагов кота не должен воспроизводился, как только начинается игра, потому что сначала кот стоит неподвижно. Снимите флажок Play on Awake (воспроизведение при пробуждении).
Вы хотите, чтобы звук продолжал воспроизводиться, пока вы не скажете ему остановиться, поэтому он должен зацикливаться. Установите флажок Loop.
Теперь необходимо отредактировать скрипт кота, чтобы шаги воспроизводились, когда кот начинает движение, и прекращались, когда кот останавливается.
Откройте скрипт PlayerController для редактирования.
Первое, что вам понадобится, это ссылка на компонент Audio Source, который вы только что добавили в JohnLemon. Заведем глобальную переменную:
AudioSource catAudioSource;
В методе Start() привяжем эту переменную к компоненту Audio Source, который мы добавили объекту JohnLemon:
catAudioSource= GetComponent<AudioSource>();
Теперь каждый кадр в методе Update() мы должны проверять, движется кот или нет. Для этого у нас в коде уже есть переменная isWalking, которая хранит в себе признак движения кота. Поэтому в методе Update() мы можем написать условный блок if-else, который даст нам два варианта развития событий - кот идет и кот стоит:
if(isWalking)
{
}
else
{
}
Если кот идет, то нам нужно воспроизвести звук шагов, а если кот стоит, то остановить звук шагов:
if (isWalking)
{
catAudioSource.Play();
}
else
{
catAudioSource.Stop();
}
В этом коде есть проблема - когда кот идет звук шагов будет заново запускаться каждый кадр. Давайте будем запускать звук только в том случае, если он еще не запущен, для этого добавим условный блок:
if(catAudioSource.isPlaying == false)
{
catAudioSource.Play();
}
Параметр catAudioSource.isPlaying вернет true, если звук уже проигрывается и false, если нет.
Метод Update() персонажа будет иметь вид:
Последний настройка звука для вашей игры — это жуткие звуки, которые призраки будут издавать, проходя мимо. Это не только улучшит атмосферу игры, но и поможет игроку определить, насколько близка опасность.
Одна из проблем заключается в том, что Призраки не становятся громче по мере приближения к Джону Лимону, они становятся громче по мере приближения к камере. Это связано с тем, что Audio Listener по умолчанию находится на основной камере. Давайте изменим это. Для этого выберите в окне иерархии объект Main Camera, в Инспекторе щелкните контекстное меню компонента Audio Listener и выберите Remove Component:
Теперь откройте префаб JohnLemon и в Инспекторе добавьте компонент Audio Listener:
Теперь, когда у префаба JohnLemon есть Audio Listener, все аудио Ghosts будут иметь громкость относительно позиции JohnLemon. Это значительно облегчит игроку определение того, насколько близко призрак.
Теперь давайте добавим звук призракам. Откройте префаб призрака, в окне Project перейдите в папку Assets > Audio и мышкой перетащите аудиоклип SFXGhostMove на игровой объект Ghost в окне иерархии:
В инспекторе автоматически появится новый компонент Audio Source, связанный с выбранный аудиоклипом.
Чтобы уровень громкости не был сильно громким и менялся в зависимости от расстояния до JohnLemon:
- Включите флажок свойства Loop
- Установите для свойства Volume значение 0.4
- Установите Spatial Blend на 1 , чтобы он был полностью трехмерным
Давайте настроим пару расширенных функций, чтобы ваши призраки звучали еще лучше, для этого разверните раздел «3D Sound Settings». Настройки 3D-звука управляют тем, как звук меняется в зависимости от расстояния до устройства прослушивания звука.
Измените свойство Max Distance на 10. Когда призрак находится на расстоянии 10 метров, игрок сможет его слышать, но очень тихо.
Параметр Volume Rolloff определяет как громкость изменяется с расстоянием. В настоящее время установлено значение логарифмического спада, которое хорошо работает на больших расстояниях. Поскольку ваше максимальное расстояние теперь составляет всего 10, измените Volume Rolloff на Custom Rolloff.
И осталась еще одна проблема - мы добавили компонент Audio Listener на JohnLemon, но когда JohnLemon поворачивается, Audio Listener поворачивается вместе с ним. Это означает, что когда JohnLemon поворачивается к нам лицом, камера и аудиоприемник смотрят в разные стороны. Из-за этого Призраки будут звучать тихо, как будто они не рядом.
По умолчанию аудиоклип SFXGhostMove настроен на воспроизведение моно вместо стерео. Это означает, что звук идентичен через левый и правый каналы. Задайте для свойства Spread значение 180. Это означает, что половина звука будет исходить от каждого канала, а поскольку эти каналы равнозначны, звук будет казаться одинаковым независимо от поворота персонажа.
На этом со звуком мы закончили. Запустите игру и проверьте, что в игре:
- есть фоновая музыка;
- звук шагов кота запускается только, когда кот идет
- при удалении кота от привидений их звук становится тише.