Звук: AudioSource, AudioClip и музыка
Звук превращает набор картинок в живую игру. Прыжок без «бдыщ», монета без «дзынь» — это совсем не то. Разберём, как Unity проигрывает звук.
Суть: звук в Unity — это пара: AudioClip (файл звука) и AudioSource (компонент-«колонка», который его проигрывает). Короткие эффекты играют через
PlayOneShot, фоновую музыку — через зацикленный AudioSource. Чтобы было что слышать, на сцене нужен AudioListener (он есть на камере).
Звук в Unity устроен как настоящая аудиосистема. Есть звуковой файл — AudioClip (импортированный wav/ogg/mp3). И есть источник — AudioSource, компонент-колонка на объекте. Чтобы услышать звук, нужен ещё слушатель — AudioListener, который по умолчанию висит на главной камере (как «уши» игрока).
Различают два сценария. Эффекты (прыжок, выстрел, подбор) — короткие, играют поверх друг друга; для них есть PlayOneShot. Музыка — длинная, зациклена (loop), играет фоном на отдельном AudioSource.
Как работает под капотом
AudioListener (на камере = "уши")
^
| слышит
|
AudioSource (колонка) + AudioClip (звуковой файл)
|
PlayOneShot(clip) -> разовый эффект (прыжок, монета)
loop=true, Play() -> фоновая музыка по кругуЗвук бывает 2D (одинаково слышен везде — UI, музыка) и 3D (тише вдалеке, есть направление — для мира). Это задаёт параметр Spatial Blend у AudioSource.
using UnityEngine;
public class SoundFx : MonoBehaviour
{
[SerializeField] private AudioClip coinClip;
private AudioSource audioSource;
void Awake() { audioSource = GetComponent<AudioSource>(); }
public void PlayCoin()
{
audioSource.PlayOneShot(coinClip); // разовый эффект
}
}Управление громкостью — это математика микса. Смоделируем на Python расчёт итоговой громкости с учётом общего, музыкального и мастер-уровней:
# Итоговая громкость = клип * канал * мастер, ограничено [0, 1]
def final_volume(clip_vol, channel_vol, master_vol):
v = clip_vol * channel_vol * master_vol
return max(0.0, min(1.0, v)) # не выйти за пределы
# Звук монеты: громкий клип, канал эффектов 80%, мастер 50%
print("Монета:", final_volume(1.0, 0.8, 0.5))
# Музыка: тихий клип, канал музыки 60%, мастер 50%
print("Музыка:", final_volume(0.7, 0.6, 0.5))
# Игрок убавил всё в ноль
print("Тишина:", final_volume(1.0, 1.0, 0.0))Та же логика на Python ▶ — итоговая громкость это произведение уровней, ограниченное диапазоном 0..1. Так работают аудио-миксеры: один общий ползунок мастер-громкости управляет всеми каналами сразу.
Частые ошибки
- Нет AudioListener. Удалил камеру с листенером — звука нет. На сцене должен быть ровно один активный AudioListener.
- Музыка через PlayOneShot. PlayOneShot не зацикливает. Для фоновой музыки ставь
loop=trueи зовиPlay(). - Звук обрывается при уничтожении объекта. Если AudioSource был на пуле, которая уничтожается, звук выстрела оборвётся. Для коротких эффектов используют отдельный «звуковой» объект.
- Тяжёлый mp3 для частых эффектов. Короткие эффекты лучше как несжатый/легко декодируемый формат, чтобы не было задержки.
Best practices
- Эффекты — через
PlayOneShot; музыку — отдельный зацикленный AudioSource. - Используй Audio Mixer и группы (Music, SFX), чтобы дать игроку раздельные ползунки громкости.
- 2D-звук — для UI и музыки; 3D — для звуков в мире (взрывы, шаги), чтобы они зависели от расстояния.
Итоги: звук — это AudioClip (файл) + AudioSource (колонка) + AudioListener (уши на камере). Эффекты играют через PlayOneShot, музыку — через зацикленный источник. Итоговая громкость — произведение уровней клипа, канала и мастера. Раздели каналы Music и SFX через Audio Mixer.
Audio Mixer и снапшоты
Когда звуков становится много, управлять громкостью каждого источника по отдельности невозможно. Поэтому в Unity есть Audio Mixer — пульт с каналами (группами), куда направляют звуки: отдельно музыка, отдельно эффекты, отдельно голоса. Один ползунок группы управляет всеми звуками внутри неё разом — ровно так в настройках игр появляются раздельные регуляторы «Музыка» и «Эффекты». Микшер умеет и эффекты: эхо, приглушение, фильтры. Особенно полезны снапшоты — сохранённые наборы настроек микса, между которыми можно плавно переходить: например, при паузе игра плавно приглушает игровые звуки и поднимает музыку меню. Для первой игры хватит двух групп — Music и SFX, — но знай, что под капотом Unity даёт полноценную студийную аудиосистему, к которой ты дорастёшь по мере усложнения проекта.