1. 개요

언리얼 엔진에서는 플레이어가 키보드/마우스를 이용해 게임과 UI 중 어디에 입력을 보낼지 제어하기 위해 FInputMode 구조체를 사용합니다. UI 위젯을 띄웠을 때 플레이어가 게임 조작도 가능해야 하는지, 아니면 UI에만 집중해야 하는지를 정하는 설정입니다.

 

2. 주요 구조체 종류

구조체 설명
FInputModeGameOnly 게임 조작만 가능. UI 반응 X
FInputModeUIOnly UI에만 입력. 게임 입력은 무시
FInputModeGameAndUI 게임 조작 + UI 조작 둘 다 가능

 

3. 개념 설명

3-1. 포커싱(Focus)

  • UI 위젯 중 어떤 UI가 키보드 입력을 받을지 정하는 것.
  • 예를 들어 텍스트 입력창에 커서가 깜빡이는 상태가 “포커싱된” 상태.
  • SetWidgetToFocus() 함수로 지정.
FInputModeUIOnly InputMode;
InputMode.SetWidgetToFocus(PauseWidget->TakeWidget())

PC->SetInputMode(InputMode);
PC->bShowMouseCursor = true;

 

TakeWidget()은 UUserWidget 내부의 Slate 루트 위젯을 받아옴( UUserWidget → SWidget 변환)


Slate 위젯
- UI를 구성하기 위한 저수준 UI 프레임워크
- 실질적으로 화면에 표시되는 UI의 렌더링과 입력 처리를 담당 -> 입력 포커싱도 그 일부
- 포커싱은 Slate 시스템 레벨에서 처리되는 기능

 

3-2. 마우스 락(Mouse Lock)

  • 마우스 커서를 화면 안에 가두는 것.
  • 예: FPS 게임에서 마우스가 화면 밖으로 나가는 걸 방지.
설정값 설명
DoNotLock 마우스가 화면 밖으로 자유롭게 나감
LockAlways 마우스를 항상 화면 안에 가둠
LockOnCapture 마우스를 클릭했을 때만 화면 안에 가둠
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways);
 
 

3-3. 마우스 캡쳐(Mouse Capture)

  • 마우스 움직임이 엔진에 의해 직접 추적되고 처리되는 상태.
  • FPS처럼 커서는 안 보이지만 마우스 움직임으로 카메라가 도는 게임이 대표적.
  • 캡처된 마우스는 커서가 보이지 않고, 마우스 좌표도 고정된 상태로 처리됨.

📌 FInputModeGameAndUI에서는 아래 함수로 마우스 캡처 중 커서를 숨길지 설정 가능:

FInputModeGameAndUI InputMode;
InputMode.SetHideCursorDuringCapture(false); // 캡쳐 중 커서 숨김