Найти в Дзене
Тихий Уголок

Настройка FMOD Listener в Unity в играх от третьего лица

перевод оригинальной статьи Алессандро Фама - Third Person Listener with FMOD in Unity
Оглавление

перевод оригинальной статьи Алессандро Фама - Third Person Listener with FMOD in Unity

Настройка правильных свойств слушателя - это нечто интересное, о чем стоит задуматься в зависимости от типа игры, над которой мы работаем. В играх от первого лица все просто: настройки панорамирования и затухания слушателя соответствуют положению камеры. Игрок видит и слышит мир по голове игрока и, следовательно, по положению камеры. В этом случае мы можем просто использовать компонент Studio Listener, предоставляемый FMOD Integration. А как насчет других игр? Как следует настроить слушателя в игре от третьего лица, в которой позиции камеры и игрока независимы друг от друга? В этом коротком руководстве мы создадим скрипт для определения атрибутов панорамирования и аттенюации у Studio Listener'а.

В играх не от первого лица мы должны учитывать расположение игрока и камеры с точки зрения
панорамирования и аттенюации. Источники звука будут звучать по-разному в зависимости от того, что влияет на эти два элемента. Возьмем, к примеру, ситуацию с 2D-платформером:

2D Platformer Example (Audio Listener)
2D Platformer Example (Audio Listener)

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

***

Настройка кастомных атрибутов панорамирования и аттенюации слушателя для игры от третьего лица с FMOD в Unity (<2.01.00).

Давайте создадим новый скрипт под названием CustomListener.cs. В начале класса мы объявим два объекта GameObject, а именно: Camera (Камера) и Player (Игрок).

attributes.position - это вектор положения, передаваемый в FMOD. attributes.forward и attributes.up используются для информации о панорамировании. Если в вашей игре только один слушатель, вы можете установить переменную listener равным нулю. Сохраните скрипт, добавьте его в новый или существующий объект GameObject, добавьте в поле Player геймобъект игрока на поле игрока и геймобъект камеры в поле Cam в инспекторе:

скрипт Custom Listener в инспекторе Unity
скрипт Custom Listener в инспекторе Unity

Запустите сцену и слушайте панорамирование с учетом движения камеры.

***

Настройка кастомных атрибутов панорамирования и аттенюации слушателя для игры от третьего лица с FMOD в Unity(>2.01.00).

В FMOD 2.01.00 метод setListenerAttributes получил дополнительный параметр для позиционирования аттенюаций. Чтобы воспользоваться этой новой функцией, мы можем объявить новую функцию FMOD.VECTOR в начале класса:

FMOD.VECTOR playerPosition;

Затем мы преобразовываем вектор transform.position игрока в FMOD.VECTOR, вызвав следующую строчку:

playerPosition = FMODUnity.RuntimeUtils.ToFMODVector(player.transform.position);

Наконец, в качестве третьего аргумента в методе setListenerAttributes мы передаем позицию playerPosition:

FMODUnity.RuntimeManager.StudioSystem.setListenerAttributes(listener, attributes, playerPosition);

Полный код выглядит вот так:

#unity #unity3d #fmod #audioengine #gamedev #sounddesign #саунддизайн