내일배움캠프-언리얼

TIL - 98

이시보 2026. 7. 2. 21:03

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 뒤에 같은 곡 재생(간격을 둔 반복)
  • 주의: 사운드 에셋의 루프를 꺼야(원샷) 이 로직이 동작함. 에셋이 무한 루프면 간격 없이 이어짐.

해결한 주요 이슈

  1. 전투 종료 판정State.Player.Combat 태그(마지막 활동 후 3.5초) → 추적 몬스터 집합(추적 적 0이면 해제)으로 교체.
  2. 시작 지점 존이 무음 안 되던 문제 — 메뉴 경유로 시작 시 possess/카메라 전환 과정에서 존 진입 오버랩 이벤트가
    누락됨. 해결: 존이 서브시스템에 자가등록(BeginPlay) + InGame 진입 후 0.3초×10회 재평가(RefreshPlayerOverlap,
    GetOverlappingActors로 이벤트 비의존 직접 확인).
  3. 볼륨 적용 시 BGM 사라짐 — BGM 슬롯의 bIsUISound = true가 SoundMix 볼륨 적용과 충돌 → 해당 플래그 제거.

에디터 설정

  1. Project Settings → Retrieve → Retrieve Music
    • Menu / Default / Combat / Result BGMSound 지정 + Volume 배수 조정
    • Crossfade Duration(기본 1.5초), Loop Gap Seconds(기본 3초)
  2. 지역에 Retrieve Music Zone Volume 배치
    • Box Extent를 구역 전체로, Zone BGM 지정 (필요 시 Use Combat Music + Zone Combat BGM)
    • World Partition 레벨이면 Is Spatially Loaded 끄기 권장
  3. (연동 확인) Retrieve Settings → Audio → Music Sound Class 지정 시 옵션 음악 볼륨 슬라이더가 BGM에 적용됨

'내일배움캠프-언리얼' 카테고리의 다른 글

TIL - 100  (0) 2026.07.07
TIL - 99  (0) 2026.07.06
TIL - 97  (0) 2026.07.01
TIL - 96  (0) 2026.06.30
TIL - 95  (0) 2026.06.29