3D-аудио и AudioMixer
AudioSource, AudioListener, 3D-затухание и маршрутизация через миксер.
Звук в 3D-игре — не просто mp3 в фоне. Это пространственное звучание: шаги слева, выстрел за спиной, шёпот за стеной. Unity даёт встроенный 3D-аудиодвижок, для большинства задач достаточный.
Главные компоненты
- AudioListener — “уши” в сцене. Один на сцену. По умолчанию висит на главной Camera.
- AudioSource — источник звука. Прикрепляется к GameObject. Воспроизводит AudioClip.
- AudioClip — ассет с импортированным wav/mp3/ogg.
public class Footsteps : MonoBehaviour
{
[SerializeField] private AudioSource source;
[SerializeField] private AudioClip[] clips;
// Вызывается из Animation Event
public void Footstep_AnimEvent() {
var clip = clips[Random.Range(0, clips.Length)];
source.pitch = Random.Range(0.95f, 1.05f);
source.PlayOneShot(clip);
}
}
PlayOneShot хорош тем, что не прерывает уже играющий звук — несколько шагов могут звучать
наложением. Просто source.Play() сбросит текущее воспроизведение.
3D vs 2D звук
У AudioSource есть слайдер Spatial Blend: 0 = 2D (играет одинаково, где бы ни был слушатель), 1 = 3D (зависит от расстояния и направления). Музыка и UI — обычно 2D, диегетические звуки (выстрелы, шаги) — 3D.
Для 3D-режима настраиваются:
- Min Distance / Max Distance — на каком расстоянии громкость максимальна и где она падает в ноль.
- Volume Rolloff — кривая затухания: Linear, Logarithmic, Custom.
- Spread — насколько широко источник “размазан” в стерео.
- Doppler Level — насколько применять эффект Доплера при движении.
Звук в реальности падает по обратному квадрату расстояния — это близко к Logarithmic. Linear проще управляется, но звучит фейково. Для важных звуков (выстрелы) используйте Logarithmic с тонкой настройкой Min/Max.
AudioMixer — маршрутизация и эффекты
AudioMixer — отдельный ассет (Create → Audio Mixer), описывающий каналы (groups). Стандартная
структура — Master → Music + SFX + Voice. У каждого канала — громкость, экспонируемая в код:
[SerializeField] private AudioMixer mixer;
public void SetMusicVolume(float linear) {
// Преобразуем линейную громкость в дБ
float db = linear > 0.0001f ? Mathf.Log10(linear) * 20f : -80f;
mixer.SetFloat("MusicVolume", db);
}
Параметры миксера (“MusicVolume”) нужно вручную “Expose to Script” — клик правой кнопкой на слайдере группы → Expose.
К каналу можно подключить эффекты: low-pass filter, reverb, compressor. Удобно для:
- Подводный эффект (low-pass на Master, когда игрок под водой).
- Реверберация в комнате (Reverb Zone + reverb-эффект в миксере).
- Глушение SFX, когда играет диалог (sidechain через duck volume).
AudioSource.PlayClipAtPoint — одноразовый источник
Удобный helper, когда нужно проиграть звук в точке и забыть:
AudioSource.PlayClipAtPoint(_explosionClip, transform.position, volume: 1f);
Unity создаст временный GameObject с AudioSource, проиграет и уничтожит. Не подходит для контроля звука (нельзя остановить, изменить громкость на лету), но идеален для коротких эффектов.
AudioMixer Snapshots — состояния микшера
Snapshot — это именованное состояние всех слайдеров и эффектов микшера. Через AudioMixer можно плавно блендить между snapshot’ами — это main path для “ducking” музыки во время диалогов, смены атмосферы при входе в комнату, ducking SFX в paused state.
В Audio Mixer-окне:
- Создайте AudioMixer (если ещё нет) → правый клик на нём → Add Snapshot.
- Сохраните несколько snapshot’ов:
Default,Underwater,Paused,Combat. - В коде вызывайте
snapshot.TransitionTo(duration):
[SerializeField] private AudioMixerSnapshot defaultSnap;
[SerializeField] private AudioMixerSnapshot underwaterSnap;
public void OnEnterWater() {
underwaterSnap.TransitionTo(0.5f); // 0.5 секунды плавного перехода
}
public void OnExitWater() {
defaultSnap.TransitionTo(0.5f);
}
Снапшот не просто меняет громкость — он переключает все экспонируемые параметры и состояния эффектов (включение/выключение low-pass, EQ-кривые и т.д.). Это быстрее и аккуратнее, чем менять параметры по одному из кода.
Подводные камни
- Один AudioListener. Если случайно появилось два (например, в обоих сценах при аддитивной загрузке), будет варнинг и звук может звучать странно. Проверяйте в редакторе.
- Сжатие на мобильных. mp3/ogg распакуется на лету. Для коротких звуков ставьте
Load Type: Decompress On Load(один раз распакуется, в памяти PCM). Для длинных —Streaming. - Forced To Mono. Если 3D-звук импортирован как стерео, Unity может “потерять” пространственный эффект — конкретный канал стерео всегда играет с одной стороны. Включайте Force To Mono для 3D SFX.
В следующей главе — UI: HUD, меню, диалоги, и как они вообще существуют в 3D-сцене.