PART 5 · 강의 1/3

Input 모드 관리

Game/UI/GameAndUI 입력 모드 전환, 마우스 캡처, 그리고 CommonUI와의 연동을 학습합니다.

01

UE5 입력 모드 개요

세 가지 입력 모드와 마우스 캡처

C++ - 기본 입력 모드 전환
// PlayerController에서 입력 모드 설정 // 1. Game Only: 게임 입력만, 마우스 커서 숨김 FInputModeGameOnly GameMode; SetInputMode(GameMode); SetShowMouseCursor(false); // 2. UI Only: UI 입력만, 게임 입력 차단 FInputModeUIOnly UIMode; UIMode.SetWidgetToFocus(MenuWidget->TakeWidget()); UIMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); SetInputMode(UIMode); SetShowMouseCursor(true); // 3. Game and UI: 둘 다 허용 (HUD 상호작용) FInputModeGameAndUI GameAndUI; GameAndUI.SetWidgetToFocus(HUDWidget->TakeWidget()); GameAndUI.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways); GameAndUI.SetHideCursorDuringCapture(false); SetInputMode(GameAndUI); SetShowMouseCursor(true);
모드게임 입력UI 입력마우스사용 예
Game OnlyOX잠금/숨김일반 게임플레이
UI OnlyXO자유/표시메뉴, 인벤토리
Game And UIOO설정 가능HUD 상호작용, 빌딩 모드
CommonUI 사용 시 주의

CommonUI를 사용하는 프로젝트에서는 SetInputMode() 직접 호출 대신 CommonUI의 Activatable Widget 입력 모드 설정을 사용하세요. 두 시스템이 동시에 입력 모드를 제어하면 충돌이 발생할 수 있습니다.

02

마우스 캡처와 잠금

뷰포트 내 마우스 동작 제어

C++ - 마우스 캡처 옵션
// EMouseCaptureMode 옵션 EMouseCaptureMode::NoCapture // 캡처 없음 (메뉴) EMouseCaptureMode::CapturePermanently // 항상 캡처 (FPS 게임) EMouseCaptureMode::CaptureDuringMouseDown // 클릭 중만 캡처 EMouseCaptureMode::CaptureDuringRightMouseDown // 우클릭 중만 // EMouseLockMode 옵션 EMouseLockMode::DoNotLock // 뷰포트 밖으로 이동 가능 EMouseLockMode::LockOnCapture // 캡처 시 잠금 EMouseLockMode::LockAlways // 항상 뷰포트 내 잠금 EMouseLockMode::LockInFullscreen // 전체화면 시만 잠금 // 실전 패턴: 메뉴 열기/닫기 void AMyPlayerController::ToggleMenu() { if (bMenuOpen) { // 메뉴 닫기 → 게임 모드 복귀 MenuWidget->RemoveFromParent(); FInputModeGameOnly Mode; SetInputMode(Mode); SetShowMouseCursor(false); SetPause(false); } else { // 메뉴 열기 → UI 모드 MenuWidget = CreateWidget<UMainMenu>(this, MenuClass); MenuWidget->AddToViewport(100); FInputModeUIOnly Mode; Mode.SetWidgetToFocus(MenuWidget->TakeWidget()); SetInputMode(Mode); SetShowMouseCursor(true); SetPause(true); } bMenuOpen = !bMenuOpen; }
03

CommonUI 입력 모드 관리

Activatable Widget 기반의 자동 입력 모드 전환

C++ - CommonUI 방식의 입력 모드
// CommonUI에서는 Activatable Widget이 입력 모드를 자동 관리 UCLASS() class UPauseMenu : public UCommonActivatableWidget { GENERATED_BODY() public: UPauseMenu() { // 이 위젯이 활성화되면 자동으로 Menu 모드로 전환 // 비활성화되면 이전 모드로 자동 복귀 SetInputMode(ECommonInputMode::Menu); SetMouseCaptureMode(EMouseCaptureMode::NoCapture); } }; // 위젯 활성화/비활성화만으로 입력 모드가 전환됨 // 수동 SetInputMode() 호출 불필요 MenuStack->AddWidget<UPauseMenu>(PauseMenuClass); // → 자동으로 Menu 모드 + 마우스 표시 PauseMenu->DeactivateWidget(); // → 자동으로 이전 입력 모드 복귀
CommonUI의 입력 모드 스택

CommonUI는 입력 모드를 스택으로 관리합니다. 메뉴 A(Menu 모드) 위에 다이얼로그 B(Menu 모드)를 Push하면, B가 Pop될 때 A의 입력 모드로 복귀합니다. 이 자동 관리 덕분에 수동으로 이전 모드를 추적할 필요가 없습니다.

04

입력 모드 전환 모범 사례

버그 없는 입력 모드 관리를 위한 패턴

올바른 패턴

  • + CommonUI 사용 시 Activatable Widget에 위임
  • + 입력 모드 전환을 중앙 관리자에서 처리
  • + SetWidgetToFocus로 초기 포커스 명시
  • + UI 닫힐 때 반드시 Game 모드 복귀 확인

피해야 할 패턴

  • - 여러 곳에서 SetInputMode 중복 호출
  • - CommonUI와 SetInputMode 혼용
  • - UI 닫기 시 입력 모드 복귀 누락
  • - 마우스 커서 상태 불일치
SUMMARY

핵심 요약

  • UE5는 Game Only, UI Only, Game And UI 세 가지 입력 모드를 제공합니다
  • CommonUI 프로젝트에서는 Activatable Widget의 입력 모드 설정이 자동으로 스택 관리됩니다
  • SetWidgetToFocus()로 입력 모드 전환 시 초기 포커스 대상을 명시해야 게임패드 UX가 정상 동작합니다
  • 입력 모드 전환 로직은 중앙 관리자(또는 CommonUI)에 집중시켜 중복과 불일치를 방지합니다
  • UI를 닫을 때 입력 모드와 마우스 커서 상태를 반드시 원래대로 복귀시켜야 합니다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 입력 모드 전환 시스템 구현

SetInputMode_GameOnly, SetInputMode_UIOnly, SetInputMode_GameAndUI 세 가지 모드를 상황에 맞게 전환하는 시스템을 구현하세요. 인벤토리 열기 시 UIOnly, 닫기 시 GameOnly로 전환하고 마우스 커서를 관리합니다.

실습 2: 마우스 캡처 상태 관리

FInputModeData의 SetLockMouseToViewportBehavior, SetHideCursorDuringCapture 옵션을 실험하세요. 게임 중에는 마우스가 뷰포트에 잠기고, 메뉴에서는 자유롭게 움직이는 동작을 구현합니다.

심화 과제

게임 상태(탐색/전투/대화/메뉴/컷신)별로 적절한 입력 모드를 자동 설정하는 InputModeManager를 구현하세요. 상태 스택으로 관리하여 중첩된 상태에서도 올바른 입력 모드가 복원되도록 합니다.