Enhanced Input BP
UE5의 Enhanced Input 시스템으로 유연하고 확장 가능한 입력 처리를 구현합니다
Enhanced Input 시스템 개요
UE5의 새로운 입력 시스템 구조와 핵심 에셋
Enhanced Input은 UE5의 기본 입력 시스템입니다. UE4의 축/액션 매핑을 대체하며, 런타임에 매핑 컨텍스트를 동적으로 추가/제거할 수 있어 상황별 입력 전환이 용이합니다.
프로젝트 설정의 Input > Default Classes에서 기존 PlayerInput과 InputComponent 대신 EnhancedPlayerInput과 EnhancedInputComponent가 기본값입니다. UE4 스타일의 Axis/Action Mapping은 UE5.1에서 deprecated 되었습니다.
3대 핵심 에셋
Input Action (IA)
플레이어가 할 수 있는 행동 하나를 정의합니다. "이동", "점프", "공격" 등. Value Type으로 입력 값의 형태를 지정합니다.
Input Mapping Context (IMC)
Input Action과 실제 입력 키를 연결합니다. 상황별로 다른 IMC를 적용할 수 있습니다 (이동 중, 탈것, 메뉴).
Modifier & Trigger
Modifier: 입력값을 변환 (Negate, Swizzle, DeadZone). Trigger: 발동 조건 (Pressed, Released, Hold, Tap).
W, Space, Mouse
키 → IA 매핑
값 변환
발동 조건
로직 실행
Input Action 설정
Input Action의 Value Type과 Trigger 설정
Input Action Value Type
| Value Type | 차원 | 용도 | 예시 |
|---|---|---|---|
| Digital (Bool) | 0/1 | 버튼 입력 | 점프, 상호작용, 공격 |
| Axis1D (Float) | 1D | 단일 축 값 | 스로틀, 줌 |
| Axis2D (Vector2D) | 2D | 평면 방향 | WASD 이동, 마우스 시선 |
| Axis3D (Vector) | 3D | 3D 방향 | VR 컨트롤러, 자이로 |
// 콘텐츠 브라우저 > 우클릭 > Input > Input Action
IA_Move
└─ Value Type: Axis2D // WASD → 2D 벡터
IA_Look
└─ Value Type: Axis2D // 마우스 → 2D 벡터
IA_Jump
└─ Value Type: Digital // Space → True/False
IA_Interact
└─ Value Type: Digital // E키 → True/False
IA_Sprint
└─ Value Type: Digital // Shift → True/False
주요 Trigger 종류
| Trigger | 설명 | Triggered 발생 시점 |
|---|---|---|
| Down | 키를 누르고 있는 동안 (기본값) | 매 프레임 |
| Pressed | 키를 누른 순간 | 1회 |
| Released | 키를 뗀 순간 | 1회 |
| Hold | 일정 시간 누르고 있을 때 | Hold 시간 경과 후 |
| Hold and Release | 일정 시간 눌렀다 뗄 때 | 뗀 순간 |
| Tap | 빠르게 눌렀다 뗄 때 | 뗀 순간 |
Input Mapping Context 설정
키 매핑, Modifier, Context 전환
IMC 구성
IMC_Default (Input Mapping Context)
│
├─ IA_Move (Axis2D)
│ ├─ W Key: Modifiers = [Swizzle(YXZ)] // (0,1) → 전진
│ ├─ S Key: Modifiers = [Negate, Swizzle(YXZ)] // (0,-1) → 후진
│ ├─ A Key: Modifiers = [Negate] // (-1,0) → 좌
│ ├─ D Key: (없음) // (1,0) → 우
│ └─ Gamepad Left Stick: Modifiers = [DeadZone(0.2)]
│
├─ IA_Look (Axis2D)
│ ├─ Mouse XY: Modifiers = [Negate(Y축만)]
│ └─ Gamepad Right Stick: Modifiers = [DeadZone(0.2), Scalar(50)]
│
├─ IA_Jump (Digital)
│ ├─ Space Bar: Trigger = Pressed
│ └─ Gamepad Face Button Bottom: Trigger = Pressed
│
└─ IA_Interact (Digital)
└─ E Key: Trigger = Pressed
주요 Modifier 종류
| Modifier | 설명 | 사용 예시 |
|---|---|---|
| Negate | 값 반전 (-1 곱하기) | S키를 후진으로, A키를 좌로 |
| Swizzle | 축 순서 변경 (XYZ 재배치) | W키(X축)를 Y축 이동으로 변환 |
| Dead Zone | 소규모 입력 무시 | 게임패드 스틱 미세 움직임 무시 |
| Scalar | 값에 배수 곱하기 | 마우스 감도 조절 |
| Smooth | 값 변화를 부드럽게 보간 | 카메라 이동 스무싱 |
| Response Curve | 입력-출력 커브 매핑 | 비선형 가속 |
런타임 Context 전환
// BeginPlay에서 기본 IMC 등록
[Event BeginPlay]
└──> [Get Enhanced Input Local Player Subsystem]
└──> [Add Mapping Context]
├─ Mapping Context: IMC_Default
└─ Priority: 0
// 탈것 탑승 시 Context 전환
[On Enter Vehicle]
├──> [Remove Mapping Context] (IMC_Default)
└──> [Add Mapping Context] (IMC_Vehicle, Priority: 0)
// 탈것 하차 시 원복
[On Exit Vehicle]
├──> [Remove Mapping Context] (IMC_Vehicle)
└──> [Add Mapping Context] (IMC_Default, Priority: 0)
여러 IMC가 동시에 활성화되면 높은 Priority 값이 우선합니다. 같은 키에 대해 높은 우선순위의 IMC가 먼저 처리되고, 해당 IMC가 입력을 소비(consume)하면 낮은 우선순위는 무시됩니다.
블루프린트에서 입력 처리
EnhancedInputAction 이벤트 바인딩과 값 활용
이벤트 바인딩
// 이벤트 그래프에서 우클릭 > "IA_Move" 검색
// → EnhancedInputAction IA_Move 이벤트 노드 생성
[EnhancedInputAction IA_Move]
├─ Execution Pins:
│ ├─ Triggered // 트리거 조건 만족 시 (주로 사용)
│ ├─ Started // 입력 시작
│ ├─ Ongoing // 입력 진행 중
│ ├─ Canceled // 입력 취소/중단
│ └─ Completed // 입력 완료
│
└─ Data Pins:
├─ Action Value // InputActionValue (구조체)
├─ Elapsed Seconds // 입력 경과 시간
└─ Triggered Seconds // 트리거된 시간
이동 구현 예제
// IA_Move Triggered 이벤트에서 캐릭터 이동
[EnhancedInputAction IA_Move - Triggered]
│
├─ Action Value ──> [Get Action Value (Vector2D)]
│ ├─ X: Right/Left
│ └─ Y: Forward/Back
│
├──> [Get Control Rotation] ──> [Break Rotator] ──Yaw──>
│ │
│ [Make Rotator (0, Yaw, 0)] ──> [Get Forward Vector] ──ForwardDir──>
│ [Make Rotator (0, Yaw, 0)] ──> [Get Right Vector] ──RightDir──>
│
└──> [Add Movement Input]
├─ World Direction: ForwardDir * Y + RightDir * X
└─ Scale Value: 1.0
Triggered: 이동, 시점 회전 등 지속적인 입력에 사용 (매 프레임 발생)
Started: 점프, 상호작용 등 1회성 액션에 사용
Completed: 키를 뗀 시점 처리 (달리기 종료, 충전 공격 발사)
핵심 요약
- Enhanced Input은 Input Action(행동 정의) + Input Mapping Context(키 바인딩) + Modifier/Trigger(변환/조건) 3요소로 구성된다
- Value Type은 Digital(버튼), Axis1D, Axis2D(이동), Axis3D 4가지이다
- Negate와 Swizzle Modifier로 WASD 4키를 하나의 Axis2D Input Action으로 통합한다
- Add/Remove Mapping Context로 런타임에 입력 매핑을 동적으로 전환한다 (도보/탈것/메뉴)
- 이벤트의 Triggered 핀은 지속 입력, Started 핀은 1회성 액션에 적합하다
- UE4의 Axis/Action Mapping은 UE5.1에서 deprecated 되었으므로 Enhanced Input을 사용한다
도전 과제
배운 내용을 직접 실습해보세요
Input Action(IA_Move, IA_Look, IA_Jump)과 Input Mapping Context를 생성하세요. WASD를 IA_Move(Value Type: Axis2D)에 매핑하고, Swizzle Input Axis Values Modifier를 적용하여 캐릭터를 이동시키세요.
IA_Sprint에 Hold Trigger(Hold Time: 0.3초)를 적용하여 길게 누르면 달리기가 활성화되게 하세요. IA_Crouch에 Tap Trigger를 적용하여 토글 웅크리기를 구현하고, Dead Zone Modifier를 게임패드 스틱에 적용해보세요.
상황별 Input Mapping Context 전환 시스템을 구현하세요. 도보(Default), 차량 탑승(Vehicle), UI 열림(Menu) 3개의 IMC를 만들고, Add/Remove Mapping Context로 동적 전환하세요. Priority를 활용하여 IMC 우선순위도 설정하세요.