1. 음악 재생을 위한 AudioSource와 AudioListener
게임에 삽입하는 음악은 크게 배경음악과 효과음으로 나눌 수 있다. 음악을 재생하기 위해서는 AudioSource 컴포넌트가 필요한데, 나는 주로 SoundManager라는 Empty object를 만들어놓고 하위 자식으로 각각 BGM/Effect이라는 오브젝트를 만들어 AudioSource 컴포넌트를 추가해두었다.
AudioSource 하나로 관리해도 되지만 배경음악과 효과음이 동시에 재생될 일이 많고 볼륨 조절도 따로 하는 경우가 많기 때문에 둘은 분리하는 것이 낫다고 판단했다. 참고로 컴포넌트 추가는 오브젝트 선택 후 add component를 눌러 추가할 컴포넌트를 검색하면 된다.
AudioSource는 CD 플레이어, AudioClip은 CD라고 이해하면 쉽다. 이때 음악을 들어줄 AudioLister 컴포넌트도 필요한데, 이 컴포넌트는 유니티에서 카메라 오브젝트를 생성하면 기본으로 오브젝트에 들어있어 따로 추가할 필요는 없다.
참고로 게임 실행 중에 카메라 오브젝트 2개가 동시에 켜져있는 경우 콘솔창에 다음과 같이 2개의 audio lister가 있으니 수정해달라는 경고 메세지가 나온다.
2. 코드에 AudioSource 및 AudioClip 연결
변수로 AudioSource, AudioClip을 선언하고 해당 스크립트를 컴포넌트로 갖는 오브젝트의 inspector창에 AudioSource 컴포넌트와 AudioClip(mp3, wav등의 음원 파일)을 각각 연결하면 된다. 또한 Start()에서 loop나 playOnAwake 등을 세팅하고 배경음악의 경우 Play()로 게임이 시작될 때부터 재생한다.
public AudioSource asBGM; //배경음악 제어
public AudioClip stage8bgm; //메인 배경음악
public AudioSource asEffect; //효과음 제어
public AudioClip watchMemory; //기억을 볼 때 효과음
public AudioClip watchedEveryMemory; //기억을 다 봤을 때 효과음
void Start()
{
asBGM.loop = true;
asBGM.playOnAwake = true;
asBGM.clip = stage8bgm;
asBGM.Play();
asEffect.loop = false;
asEffect.playOnAwake = true;
}
중첩 재생이 필요한 음악의 경우 PlayOneShot() 함수를 활용한다.
예) asEffect.PlayOneShot(watchMemory);
3. 음악 파일 기본 세팅 (출처: https://mentum.tistory.com/221)
[ Audio import setting ]
1) Force To Mono(모노 강제조정) : 채널을 하나만 사용한다. 최적화를 중시한다면 체크 / 사운드의 퀄리티를 원한다면 언체크
2) Load In Background(지연된 로딩) : 배경음악이라면 체크 / 타이밍에 맞춰 재생하는 효과음이라면 언체크
3) Load Type
(1) Decompress On Load : 미리 메모리에 통채로 올려놓고 바로바로 읽어낼 수 있음. 효과음에 사용.
레이턴시가 제일 적다. 하지만 메모리를 엄청먹으니 PCM하고만 같이 사용할 것을 추천함.
(2) Compressed In Memory : 압축 상태로 메모리에 올려놓고 읽을 때 압축 풀어서 재생함. 보이스 사운드 등에 사용
(3) Streaming : 필요할때 실시간으로 읽어냄. 레이턴시가 상관없는 보통 배경음악에서 사용
4) Compression Format
(1) PCM : 최고품질 / 용량 큼 / Load Type은 Decompress On Load로 하자
(2) ADPCM : 중간 품질 / 용량 중간
(3) Vobis : 최저품질 / 용량 작음
5) Quality(음질) : Vobis의 최종적인 음질을 결정함. ( 100%면 의미없고 보통 70%정도 )
[ 결론 ]
1) 배경음악 : Load In Background 체크
Load Type : Streaming
Compression Format : Vobis (퀄리티에 따라 다르지만 보통 70-80%)
2) 타이밍 중요한 효과음 : Load Type : Decompress Decompress On Load
Compression Format : PCM
3) 보이스 혹은 타이밍 적당히 중요한 효과음 : Load Type : Compressed In Memory
Compression Format : ADPCM
4) 딜레이가 있어도 상관없는 효과음 : Load Type : Compressed In Memory
Compression Format : Vobis