배틀레드_사운드

양규빈·2024년 4월 26일

유니티

목록 보기
28/34

사운드

사운드 처리된 플레이 영상

게임에서 사운드 효과는 플레이를 더욱 다채롭게 만드는 요소 중 하나입니다.
이러한 사운드에는, 배경음악. 즉 BGM과 효과음, EffectSound로 나뉘게 됩니다.

둘의 가장 큰 차이는 메모리 관리를 위한 객체의 생명주기. 그리고 중첩 여부에 있습니다.
배경음악은, 하나의 사운드 소스가 백그라운드에 깔려 반복적으로 재생됩니다.
반면에 효과음은, 여러 개의 사운드 소스가 동시에 재생될 수 있으며, 소스 재생 후에 객체를 파괴하도록 합니다.

재생 후에도 객체를 메모리 상에서 제거하지 않는다면, 효과음 데이터는 더미가 되어 누수를 일으키게 됩니다.

구현

효과음과 배경음을 직렬화하여 입력받습니다.
그리고 각 사운드 소스들의 인덱스 값과 enum으로 매핑하여 쉽게 찾을 수 있도록 해줍니다.

효과음들은 주기적으로 메모리에서 제거해야합니다.
LateUpdate에서, 플레이 중이지 않은 사운드 소스 객체를 리무브하고 Destroy하여, 제거해줍니다.

플레이와 관련된 함수들입니다.

배경음의 재생은, 하단에서 보는 바와 같이, 따로 함수를 구현했기 public 접근자가 아니, private 접근자를 설정했습니다.

PlayEffect 함수들은 오버로딩하여 여러 타입의 매개변수를 필요에 따라 받아서 기능 작동할 수 있도록 했습니다.
특히 효과음은 사운드 소스의 길이만큼 재생하는 것 뿐만 아니라, 특정 시간 동안만 재생하는 기능을 구현하기 위해서, UniTask를 이용했습니다.

UniTask로 구현된 효과음 재생 함수는, 사운드 소스 재생 후, time값만큼 대기하고 객체 파괴합니다.

브금처리와 관련된 함수입니다.
스테이지에 따라서 string, 혹은 enum 타입으로 변수를 받아서 스테이지에 맞는 사운드 소스를 재생합니다.

VoctoryBgmPlay의 경우에는 보스 사냥 후에 재생되는 함수입니다. 현재는 골렘보스 단일 개체지만, 여러 보스를 추가하여 매개변수 값에 따라, 다른 브금을 재생할 수 있도록 합니다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글