게임에서 제공할 수 있는 콘텐츠에서 빼놓을 수 없는 것이 사운드입니다. 스팀 등에서 제공되는 패키지 게임들은 DLC로 사운드트랙을 파는 것이 일반적이고 요새는 게임 음악을 모아서 콘서트를 하는 경우도 드물지 않은 일이 되었습니다.
그만큼 게임에서 음악과 사운드가 차지하는 비중에 작지 않기 때문에 어떻게 사운드를 다룰 것인지도 중요한 부분입니다.
유니티는 기본적으로 오디오를 재생하기 위한 컴포넌트로 AudioListener를 제공합니다. 씬 위에 AudioListener가 존재해야지만 AudioSource로부터 소리를 듣고 재생할 수 있습니다. 기본적으로 씬을 생성과 동시에 생성된 카메라에 부착되어 있으나 변경을 원할 경우 기존의 AudioListener에 대한 비활성화 혹은 제거 처리가 필요합니다. 같은 씬 위에 두 개 이상을 둘 경우 Console창에서 오디오 리스너는 1개만 존재해야 한다고 끊임없이 알림을 보내줍니다.
AudioClip은 유니티에서 오디오를 다루기 위한 데이터를 담고 있습니다. Unity에서 임포트할 수 있는 오디오 파일 포맷은.aif, .wav, .mp3, .ogg의 형식을 지원합니다. 직접 오디오를 제어하지 않는 프로그래머의 경우 해당 오디오 클립을 인스턴스화해서 필요한 타이밍에 재생시키는 정도를 하게 됩니다.
팀에 전문적으로 Audio를 담당하는 사람이 있다면 FMOD 와 같은 외부 패키지를 사용하면 조금 더 많은 오디오 커스텀 작업을 수행할 수도 있습니다.
유니티에서 오디오소스를 재생함에 있어 Play를 사용하는 것과 PlayOneShot을 구분할 필요가 있습니다.
Play(): 현재 재생 중인 오디오를 중지하고 새로운 오디오를 재생합니다.
PlayOneShot(): 현재 재생 중인 오디오에 영향을 주지 않고 새로운 오디오를 동시에 재생합니다
보통 BGM과 같이 Scene위에 하나만 재생될 오디오 소스를 Play, SFX와 같이 여러 개가 동시 다발적으로 재생될 수 있는 경우 PlayOneShot을 사용하며 이 때문에 이 두 가지 오디오 소스를 구분해서 다루는 경우가 많습니다.
오디오의 경우 리듬 게임이 아닌 이상 코드에서 제어할 동작이 많은 편은 아니라 보통은 Manager 클래스를 하나 두고 Clip을 일괄적으로 관리하는 것이 효율적입니다. 클립의 로드, 재생, 일시정지, 볼륨 조절 등의 기능을 한 데 모아두면 편리합니다.