BGM 시스템
개요
상황에 따라 BGM을 자동 전환하는 시스템. 세션 상태(메뉴/게임/결과), 전투 여부, 지역(존)에 따라
트랙을 고르고, 두 오디오 슬롯을 크로스페이드로 전환한다. 각 트랙은 개별 볼륨 배수를 가진다.
우선순위: 세션 상태(메뉴/결과) > 지역(존) > 전투 > 기본
구성 요소
FRetrieveMusicTrack: 사운드(TSoftObjectPtr<USoundBase>) + 볼륨 배수(0~2). 전역 설정·존 볼륨 공용.URetrieveMusicSettings(UDeveloperSettings): Project Settings > Retrieve > Retrieve Music.MenuBGM/DefaultBGM/CombatBGM/ResultBGM,CrossfadeDuration,LoopGapSeconds
URetrieveMusicSubsystem(UWorldSubsystem): 재생·전환의 중심. 슬롯 A/B 크로스페이드.ARetrieveMusicZoneVolume(AActor+UBoxComponent): 특정 구역 전용 BGM 볼륨.
상태별 BGM (세션)
메뉴는 별도 레벨이 아니라 ERetrieveSessionState로 관리됨. Channel.Session.StateChanged 구독으로 전환 감지.
| 세션 상태 | BGM |
|---|---|
| MainMenu | MenuBGM (게임플레이 존/전투 무시) |
| Result | ResultBGM |
| Loading | 무음(보류) |
| InGame | 지역 > 전투 > 기본 |
전투 BGM 판정
- 진입:
Channel.Enemy.PlayerSpotted로 적이 나(로컬 플레이어)를 포착한 순간. 포착한 몬스터를 교전 집합에 추가.- 공격 발동·무기 장착만으로는 진입하지 않음.
- 유지/해제: 0.5초 폴링으로 교전 집합에서 파괴됨 /
State.Enemy.Dead/State.Enemy.Chase없음인
몬스터를 제거 → 집합이 비면(= 나를 추적하는 몬스터가 하나도 없으면) 기본 BGM 복귀.
지역(존) BGM
ZoneBGM(평상시) /bUseCombatMusic(토글) /ZoneCombatBGM(전투)- 존 안 +
bUseCombatMusic+ 전투 중 + 전투곡 지정됨 →ZoneCombatBGM, 아니면ZoneBGM - 사운드 미지정 존 안에서는 무음 (기본 BGM이 새어나오지 않음)
- 진입/이탈은 오버랩 이벤트 + 직접 확인(
RefreshPlayerOverlap) 병행
볼륨 (3단 구조)
최종 음량 = 트랙 볼륨 배수(에디터) × 음악 볼륨 슬라이더(옵션) × 마스터 볼륨
- 트랙 볼륨:
FRetrieveMusicTrack.Volume— 파일별 음량 편차 보정 - 옵션 슬라이더: BGM 슬롯의
SoundClassOverride = MusicSoundClass로 기존 SoundMix 볼륨 시스템과 자동 연동
리루프
- 곡이 자연 종료되면
LoopGapSeconds뒤에 같은 곡 재생(간격을 둔 반복) - 주의: 사운드 에셋의 루프를 꺼야(원샷) 이 로직이 동작함. 에셋이 무한 루프면 간격 없이 이어짐.
해결한 주요 이슈
- 전투 종료 판정 —
State.Player.Combat태그(마지막 활동 후 3.5초) → 추적 몬스터 집합(추적 적 0이면 해제)으로 교체. - 시작 지점 존이 무음 안 되던 문제 — 메뉴 경유로 시작 시 possess/카메라 전환 과정에서 존 진입 오버랩 이벤트가
누락됨. 해결: 존이 서브시스템에 자가등록(BeginPlay) + InGame 진입 후 0.3초×10회 재평가(RefreshPlayerOverlap,GetOverlappingActors로 이벤트 비의존 직접 확인). - 볼륨 적용 시 BGM 사라짐 — BGM 슬롯의
bIsUISound = true가 SoundMix 볼륨 적용과 충돌 → 해당 플래그 제거.
에디터 설정
- Project Settings → Retrieve → Retrieve Music
Menu / Default / Combat / Result BGM의Sound지정 +Volume배수 조정Crossfade Duration(기본 1.5초),Loop Gap Seconds(기본 3초)
- 지역에
Retrieve Music Zone Volume배치- Box Extent를 구역 전체로,
Zone BGM지정 (필요 시Use Combat Music+Zone Combat BGM) - World Partition 레벨이면
Is Spatially Loaded끄기 권장
- Box Extent를 구역 전체로,
- (연동 확인) Retrieve Settings → Audio → Music Sound Class 지정 시 옵션 음악 볼륨 슬라이더가 BGM에 적용됨