Skip to content

Develop document : Sound System

Sol Lee edited this page Oct 10, 2023 · 4 revisions

개요

TinyMetro 프로젝트의 소리 (배경, 효과음)은 SoundManager 클래스에 의해 관리됩니다. 해당 문서는 SoundManager 및 그와 관련된 값에 대한 설명입니다.

용어 정리

프로젝트에서 사용 할 효과음의 용어에 대한 정리입니다.

문서 및 한글 용어 -> 프로젝트 변수명
배경 음악 BGM
역 생성 알림 StationSpawn
기차 배치 SpawnTrain
객차 배치 SpawnSubtrain
기차 업그레이드 TrainUpgrade
역 업그레이드 StationUpgrade
이벤트 발생 OccurEvent
메뉴 버튼 / 상점 등 버튼 클릭 ButtonClick
상점 <-> 은행 <-> 정책 등 탭간 이동 TabMove
정지 Pause
재생 Unpause

해당 변수명은 TinyMetroEffectSound enum class에 정의되어 있습니다.

효과음 호출 위치

각각의 효과음은 다음 위치에 정의되어 있습니다.

효과음 종류 -> 호출 위치
역 생성 알림 StationManager::SpawnStation
기차 배치 Train::ServiceStart
객차 배치 Subtrain::ServiceStart
기차 업그레이드 TrainTemplate::Upgrade
역 업그레이드 Station::Upgrade
이벤트 발생 TinyMetroEventManager::OccurEvent
메뉴 버튼 / 상점 등 버튼 클릭 []
상점 <-> 은행 <-> 정책 등 탭간 이동 []
정지 []
재생 []

배치

SoundManager를 사용하기 위해 레벨에 배치할 시, 다음 사항이 고려되어야 합니다.

Game Level이 아닐 경우

타이틀 등의 Game Level이 아닐 경우, 레벨에 직접 SoundManager및 SaveManager가 배치되어야 합니다.

Game Level일 경우

Game Level일 경우, GameMode에서 SoundManager를 자동으로 스폰합니다.
이 경우, 레벨에 SoundManager를 배치할 필요가 없습니다.

SoundManager 가져오기

SoundManager는 다음과 같은 두 가지 방법으로 가져올 수 있습니다.

Game Level이 아닐 경우

타이틀 등의 Game Level이 아닐 경우, UGameplayStatics::GetActorOfClass함수를 이용합니다.

Game Level일 경우

Game Level일 경우, SoundManager는 GameMode에 의해 스폰됩니다.
따라서, GameMode의 GetSoundManager함수를 이용합니다.

기능 및 사용

SoundManager는 다음과 같은 기능을 수행합니다.

타이틀 BGM 재생

현재 레벨이 타이틀 레벨일 경우, 자동으로 타이틀 BGM을 재생합니다.

게임 BGM 재생

현재 레벨이 게임 레벨일 경우, 자동으로 게임 BGM을 재생합니다.
BGM은 랜덤으로 선택되어 반복적으로 재생됩니다.

게임 효과음 재생

게임 효과음은 특정 상황에 맞게 다음 함수를 호출하여 재생할 수 있습니다.

void SoundManager::PlaySound(TinyMetroEffectSound)

입력 enum에 해당하는 사운드를 재생합니다.

배경음 및 효과음 크기 조절

배경음 및 효과음의 크기는 다음과 같이 조절할 수 있습니다.

void SoundManager::SetMasterVolume(float)
void SoundManager::SetBackgroundVolume(float)
void SoundManager::SetEffectVolume(float)

또한, 다음 함수를 통해 현재 배경음 및 효과음의 값을 받아올 수 있습니다.

float SoundManager::GetMasterVolume()
float SoundManager::GetBackgroundVolume()
float SoundManager::GetEffectVolume()

Master volume의 경우, Background 및 Effect모두에 영향을 미치는 값입니다.
최종적인 Background 및 Effect값은 각각의 값에 Master volume의 값이 곱해져서 적용됩니다.

Clone this wiki locally