서론
-어쩌다 보니 팀원 5명이 모여 신규 프로젝트를 진행하게 됐다. 그와 별개로 회사의 다른 신규 프로젝트들도 맡게 되면서, 게임에서 필수이자 공통적인 요소(예: 사운드)를 구현할 때마다 조금씩 막히는 부분이 있었다.
특히 오디오 믹서 설정은 여러 번 해 봤는데도 매번 검색부터 시작하는 내 모습을 발견하곤 했다. 그래서 이번에 기록으로 남겨 두어, 다음에 같은 상황을 마주했을 때 한 번 더 되새기려 한다.
AudioMixer
- 오디오 믹서는 AudioSources에서 생성하는 오디오 시그널을 더 복잡하게 라우팅하고 믹싱하는 AudioSOurces를 참조할 수 있는 에셋이다. AudioGroup 계층 구조를 통해 믹싱을 기반으로 하는 카테고리를 생성한다.
AudioMixer를 사용하는 이유?
- 오디오 제어 및 균형 조정
Audio Source의 볼륨·패닝·스테레오 위치를 다루고, 전체 밸런스를 믹서에서 한눈에 관리. - 그룹 라우팅의 이점
여러 소스를 Music / SFX / Voice / UI / Ambient / (ReverbReturn) 같은 믹서 그룹으로 묶어 공통 볼륨·이펙트·우선순위를 일괄 관리. 규모가 커질수록 유지보수성이 크게 올라감. - 스냅샷(Snapshots)으로 상황 전환
탐험→전투, 실내→야외, 메뉴 진입 등 상황에 맞는 믹스 상태를 저장해 페이드 시간으로 부드럽게 전환. - 사이드체인/더킹(Ducking)
대사·UI가 나올 때 음악 그룹을 자동으로 살짝 낮춰 정보 가독성 확보(Compressor의 Sidechain 사용). - 이펙트 체인 & 공유 리버브(Send/Return)
EQ/컴프/리미터/리버브를 그룹 체인에 적용. 리버브는 소스별 개별 적용 대신 ReverbReturn 리턴용 그룹으로 모아 성능과 일관성 확보. - Exposed 파라미터로 UI·스크립트 연동
슬라이더/옵션 메뉴에서 MasterVolume, MusicLowpass 같은 파라미터를 즉시 제어. - 미터링·클리핑 방지
그룹별 레벨 미터로 피크 확인, 마스터에 리미터로 찢어짐 예방. 작업 헤드룸은 약 -6 dB 권장. - 성능 최적화 포인트
무거운 이펙트는 리턴용 그룹으로 공유, 모바일에선 필터 남발 금지, 필요 시 그룹 단위 Bypass로 상황별 부담 조절. - 팀 워크플로 & 네이밍 규칙
Grp_Music, Grp_SFX, RTN_Reverb, Vol_Master, Ducking_Amount처럼 일관된 네이밍과 책임 구분으로 충돌 최소화.
AudioMixer 사용법

프로젝트 - 마우스 우클릭 - 크리에이트 - 오디오 - 오디오믹서

오디오믹서 오픈 - 그룹에서 사용할 그룹 생성

오디오 그룹에서 볼륨 우클릭 - Expose volume 세팅

화살표가 생겼으면 세팅이 잘 된것이다.
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;
public class AudioMixerController : MonoBehaviour
{
[Header ("오디오 믹서")]
[SerializeField]
AudioMixer _audioMixer;
[SerializeField]
Slider _masterSoundSlider;
[SerializeField]
Slider _BgmSlider;
[SerializeField]
Slider _sfxSlider;
// Start is called once before the first execution of Update after the MonoBehaviour is created
private void Awake()
{
_masterSoundSlider.onValueChanged.AddListener(SetMasterVolume);
_BgmSlider.onValueChanged.AddListener(SetMusicVolume);
_sfxSlider.onValueChanged.AddListener(SetSFXVolume);
}
public void SetMasterVolume(float volume)
{
_audioMixer.SetFloat("Master", Mathf.Log10(volume) * 20);
}
public void SetMusicVolume(float volume)
{
_audioMixer.SetFloat("BGM", Mathf.Log10(volume) * 20);
}
public void SetSFXVolume(float volume)
{
_audioMixer.SetFloat("SFX", Mathf.Log10(volume) * 20);
}
}
'유니티' 카테고리의 다른 글
| 유니티 자동화 툴 만들기<프로젝트 에셋 관련 기능 정리> (0) | 2025.11.01 |
|---|---|
| Custom Editor (0) | 2025.08.30 |
| 스크립팅 백엔드 (2) | 2025.03.30 |
| RectTransformUtility (3) | 2025.03.19 |
| RectTransformUntility에 대해서 (17) | 2025.01.07 |