레벨 블루프린트와 위젯 블루프린트에서 PlaySound2D로 배경음악 재생
메인메뉴레벨에서 히든승리UI로 전환 시 두 배경음악이 동시에 재생되는 문제 발생
: GameInstance 중앙 관리 방식
UPROPERTY()
class UAudioComponent* CurrentBGMComponent;
UFUNCTION(BlueprintCallable, Category = "Audio")
void PlayBackgroundMusic(USoundBase* NewMusic);
UFUNCTION(BlueprintCallable, Category = "Audio")
void StopBackgroundMusic();
void UDCGameInstance::PlayBackgroundMusic(USoundBase* NewMusic)
{
// 기존 음악 정지
if (IsValid(CurrentBGMComponent) && CurrentBGMComponent->IsPlaying())
{
CurrentBGMComponent->Stop(); // Stop()() 아닌 Stop()만 사용!
}
// 새 음악 재생
if (NewMusic)
{
CurrentBGMComponent = UGameplayStatics::SpawnSound2D(
this, NewMusic, 1.0f, 1.0f, 0.0f
);
}
}
기존 PlaySound2D 노드 제거
Event Construct → Get Game Instance → Cast To DCGameInstance
As DCGameInstance 핀에서 Play Background Music 함수 호출
New Music 핀에 사운드 에셋 연결

중앙 관리: 모든 배경음악을 한 곳에서 제어
자동 정지: 새 음악 재생 시 기존 음악 자동 중단
레벨 간 지속: GameInstance는 레벨 전환과 무관하게 유지
확장성: 나중에 복잡한 음악 시스템으로 확장 용이
모든 배경음악을 GameInstance 방식으로 통일해야 함
일부만 바꾸면 여전히 음악 겹침 발생
UPROPERTY() 선언으로 GC 보호 필요
IsValid() 체크로 안전한 포인터 접근
단순한 음악 겹침 문제도 아키텍처 관점에서 접근하는 것이 중요
블루프린트와 C++ 혼용 시 일관성 있는 패턴 적용 필요
GameInstance는 전역 상태 관리에 매우 유용한 패턴