스크립터블 오브젝트로 생성한다.
1. 스크립터블 오브젝트로 관리한다. 오디오 클립 파일을 딕셔너리로 관리하기 위해, 이름을 string 변수로 가진다.
2. 가지고 있는 필드는 오디오 클립 파일, string 이름, float 볼륨, bool 루프여부를 가진다.
마찬가지로 스크립터블 오브젝트로 생성한다.
오디오 매니저에서 오디오데이터들을 딕셔너리로 만들 때 사용하는 리스트다. 오디오 데이터를 여기에 모두 등록시키면, 오디오 매니저에서 딕셔너리로 사용한다.
Resources 폴더에 넣어서 관리한다. 오디오 매니저에서 Awake때 Resource.Load로 가져온다
오디오 데이터들을 활용해 사용할 수 있게 만드는 매니저이다. 사용되는 기능은 아래와 같다.
2. 배경음악 재생
3. 백색소음 재생
4. 효과음 재생(3D, 네트워크)
5. 효과음 재생(2D, UI)
6. 기본 배경음악, 백색소음 재생
네트워크 환경에서 동시에 모든 클라이언트들에서 재생하기 위해서는 PunRPC 함수로 수행해야 한다.
PunRPC 함수를 구현하기 위해서는 두 가지 조건이 필요하다.
1 : SingletonPun<AudioManager>를 상속받아서 구현한다.
2 : PhotonView를 부착해서 네트워크 기능을 사용한다.


설정 창에서 오디오의 볼륨을 조절할 수 있게 하기 위해서 Unity의 Audio Mixer 기능을 사용한다.
여러 오디오를 하나의 오디오 그룹으로 묶어서 관리할 수 있게 해준다.

오디오 믹서 탭을 열면 위와같이 나온다. 여기서 우리가 사용할 기능은 Groups에서 찾을 수 있다. 그룹으로 BGM, SFX를 추가한다.
오디오 믹서의 볼륨은 db(데시벨)단위이다. 범위는 -80 ~ 0(db). 그 이상은 증폭이다. 데시벨은 상용로그(log10)의 로그 스케일 이므로, 사운드 설정 창에서 입력받은 슬라이드의 값 0~1은 다음과 같이 변환 되어야 한다.
audioMixer.SetFloat("MasterVolume", Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * 20f);
클램프하는 최저값이 0.0001f 인 이유는 로그 스케일 이므로 0이 존재하지 않기 때문. 0.0001f는 -80db로, 무음에 가깝다. 최대값 1은 0db으로 변환된다.
예시로, 0.45(100 기준 45)를 넣게 되면, -6.9값이 나온다. -6db 이 절반의 값인 것을 고려하면 매우 비슷하다.
역으로 변환하자면 다음과 같다.
public float GetVolume(string groupName)
{
audioMixer.GetFloat(groupName, out float value);
return Mathf.Pow(10f, value / 20f); // dB → 0~1
}
-6.9가 value일 경우 결과값은 0.451... 이다.
추가된 믹서의 그룹으로 기존의 오디오 매니저를 연결한다.
오디오 데이터의 클립들이 재생 될 때, 아웃풋으로 쓰일 믹서의 그룹을 지정해줘야 한다.
// 믹서 및 그룹 연결
mixer = Resources.Load<AudioMixer>("Audio/AudioMixer");
bgmGroup = mixer.FindMatchingGroups("Master/BGM")[0];
sfxGroup = mixer.FindMatchingGroups("Master/SFX")[0];
// 오디오 소스 세팅
bgmSource = gameObject.GetOrAddComponent<AudioSource>();
ambientSource = gameObject.AddComponent<AudioSource>();
effectSource = gameObject.AddComponent<AudioSource>();
// 오디오 소스와 믹서 연결
bgmSource.outputAudioMixerGroup = bgmGroup;
ambientSource.outputAudioMixerGroup = bgmGroup;
effectSource.outputAudioMixerGroup = sfxGroup;
오디오 설정 값을 로컬에 저장한다.
게임 시작 시, 오디오 매니저가 초기화 될 때 PlayerPrefs.GetFloat로 저장된 믹서그룹의 볼륨 설정 값을 가져온다.
계정에 따라서 저장하게 하려면 json으로 하거나, 데이터베이스로 동기화 해야 한다.

에디터에서 Audio Mixer 탭을 열면, 믹서 그룹들의 볼륨을 실시간으로 조절할 수 있다. 볼륨 뿐만 아니라 Solo, Mute, Bypass도 실시간으로 가능.