TIL_054: 메뉴 위젯 병합

김펭귄·2025년 10월 28일

Today What I Learned (TIL)

목록 보기
54/93

오늘 학습 키워드

  • 메뉴 위젯 병합

1. MenuWidget 병합

  • 팀프로젝트에서 게임 시작 시 바로 게임을 플레이하는 것이 아닌, 메인메뉴가 뜨도록 구현하려 하였음

  • 팀원분과 얘기하여, 시작레벨을 메인메뉴 전용 레벨로 설정하고 메뉴가 뜨도록 구현

FString CurrentMapName = GetWorld()->GetMapName();
if (CurrentMapName.Contains(TEXT("Menu")))
{
	UMenuWidget::ShowMainMenuStatic(this, MenuWidgetClass, false);
}

2. 트러블 슈팅

  • 하지만, start버튼 눌러 게임을 시작하려 하면 게임이 터지는 에러 발생

  • 해당 메뉴위젯을 만든 팀원과 상의하며 서로 브랜치도 따로 만들어보고, 로그도 하나씩 찍어보면서 에러의 원인을 같이 찾아봄

  • 로그 찍어보며 확인해 본 결과, OpenLevel이 실행되면서 에러가 난 것을 확인하였고 이름 팀원에게 알려주어 팀원분께서 해당 레벨을 확인해주심

  • 그 결과, 게임플레이가 되려는 레벨에서 기존에 사용하던 GameMode가 아닌 해당 레벨 에셋의 게임모드로 설정되어 레벨이 열리고 에러 나 게임이 터진 것이었음

  • 게임모드 바꿔주고, 다시 해보니 잘 작동 된 것을 확인

3. EscMenuWidget 병합

  • 이제 esc 눌렀을 때도 메뉴를 뜨게하려 하였음

  • OutGameUI 담당분과 얘기하여, 팀원분은 UI와 UI클릭 시 로직을 구현하고, 나는 esc키를 누르는 인풋을 담당하기로 하였음

  • 기존 Enhanced Input System과 비슷하게 IA만들어주고 IMC도 만듦

  • 다만, Binding해주는 부분은 플레이어 객체에서가 아니라 Controller에서 해줌

  • 이유

    1. PlayerController는 플레이어가 현재 어떤 Pawn을 조종하고 있든 관계없이 입력 이벤트를 처리할 수 있고, UI나 시스템 전역에서 항상 접근 가능하므로
    2. ESC키 입력은 이동,점프 같이 플레이어 특화 동작보다는 언제나 가능한 UI 제어에 가까움
void AMyPlayerController::SetupInputComponent()
{
	Super::SetupInputComponent();

	if (UEnhancedInputComponent* EnhancedInput = 
    	Cast<UEnhancedInputComponent>(InputComponent))
	{
		EnhancedInput->BindAction(
        	EscAction, 
            ETriggerEvent::Started, 
            this, 
            &AMyPlayerController::ShowEscMenu
            );
	}
}

4. 시연 영상

profile
반갑습니다

0개의 댓글