언리얼 5 향상된 입력 시스템(Enhanced Input System)

2025. 5. 7. 00:48원티드_언리얼RPG 2기/언리얼

 

 

참고 자료: https://dev.epicgames.com/documentation/ko-kr/unreal-engine/enhanced-input-in-unreal-engine

 

향상된 입력(Enhanced Input) 시스템은 기존 입력 시스템을 완전히 대체하는 새로운 방식이다. 더 유연하고 확장성 있는 입력 처리를 제공한다. 복잡한 입력 처리, 런타임에서의 컨트롤 리매핑, 상황에 따른 입력 동작 변경 등이 가능하다. 

기존 입력 시스템이 "A키를 누르면 좌측 이동"과 같은 단순한 매핑이었다면, 향상된 입력 시스템은 "A키를 누르는 강도에 따라 이동 속도가 달라지고, 특정 상황에서는 다른 동작을 수행할 수 있다"와 같이 더 정교한 입력 처리가 가능하다.

 

1. 핵심 구성 요소

1) 입력 액션 (Input Action)

  • 역할: 게임 내에서 수행할 동작을 정의하는 데이터 애셋
  • 유형:
    1. Boolean: 켜짐/꺼짐 상태(점프, 발사 등)
    2. Axis1D: 단일 값(가속 페달 등)
    3. Axis2D: 2차원 벡터(이동, 카메라 등)
    4. Axis3D: 3차원 벡터(모션 컨트롤러 등)

 

2) 입력 매핑 컨텍스트 (Input Mapping Context)

  • 역할: 물리적 입력(키보드, 마우스, 게임패드)과 입력 액션 간의 연결을 정의
  • 특징: 여러 컨텍스트를 동시에 활성화 가능하며, 우선순위 설정 가능
  • 용도: 게임 상황(걷기, 운전, 수영 등)에 따라 다른 입력 매핑 사용

 

3) 입력 모디파이어 (Input Modifier)

  • 역할: 입력 값을 가공하는 프리프로세서
  • 종류:
    1. Dead Zone: 작은 입력값 무시(조이스틱 흔들림 방지)
    2. Scale: 입력값에 배수 적용(감도 조절)
    3. Negate: 입력값 부호 반전(방향 전환)
    4. Smooth: 입력값 변화를 부드럽게 처리
    5. Swizzle: 축 값 교환(X,Y축 교체 등)

 

4) 입력 트리거 (Input Trigger)

  • 역할: 액션이 발동되는 조건 정의
  • 상태:
    1. Started: 트리거 평가 시작(첫 감지)
    2. Ongoing: 트리거 처리 진행 중(매 Tick 마다 반복)
    3. Triggered: 트리거 조건 충족(완료)
    4. Completed: 트리거 완료
    5. Canceled: 트리거 취소
  • 종류:
    1. Pressed: 키를 누를 때
    2. Released: 키를 뗄 때
    3. Hold: 키를 누르고 있는 동안
    4. Tap: 키를 빠르게 누르고 뗄 때
    5. Double Tap: 키를 빠르게 두 번 누를 때
  1.  

2. 실전 예제: 이동 로직 구현

향상된 입력시스템은 입력감지만한다!

 

//향상된 입력을 쓰려면 EnhancedInputLocalPlayerSubsystem 에서 가져와야함

GetLocalPlayer()->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>()->AddMappingContext(...);

UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>();

 

캐릭터를 움직이려면 실제 입력했을때의 액션등을 바인딩해서 사용해야함. 

 

캐릭터 움직임을 구현하기 위한 Move 액션 이벤트 로직:

 

//카메라 움직임에서 전방벡터를 구해서 그 방향으로 이동하게함

1. 입력값 분리:
	Break Vector2D로 X(좌우), Y(전후) 값 분리
2. 카메라 기준 방향 계산:
	Get Control Rotation → Yaw 회전값 추출
	회전값으로 전방 벡터 계산: Get Forward Vector
	회전값으로 우측 벡터 계산: Get Right Vector
	이동 방향 계산:
	Forward Vector * Y (전/후 이동)
	Right Vector * X (좌/우 이동)
3. 두 벡터 합산 후 정규화

// 정규화: 벡터를 단위벡터로 만들기, 방향정보만 가지도록, 크기가 1이 되도록 나누기)

4. 이동 적용:
	Add Movement Input(계산된 방향, 크기 1.0)

 

3. 향상된 입력시스템 사용 예시

 

1) 다중 컨텍스트 활용

  • 일반 이동 컨텍스트(우선순위 0)
  • 수영 컨텍스트(우선순위 1)
  • 차량 탑승 컨텍스트(우선순위 2)
  • 메뉴 컨텍스트(우선순위 3)

입력매핑컨텍스트에 우선순위를 두고 높은것부터 실행함 (충돌 방지) 

2) 조건부 입력 처리

  • 달리기: Shift 키에 "Hold" 트리거 + 이동에 "Scale" 모디파이어(2.0)
  • 정밀 조준: 우클릭에 "Pressed" 트리거 + 시점에 "Scale" 모디파이어(0.5)

모디파이어를 통해 이동속도, 감도, 시야각 등등 수치를 조절하거나 이동방향을 반대로 반전시킬 수 있음. 또 swizzle을 통해 yxz, xyz 등 축을 교체할수있음

3) 플랫폼별 매핑

  • PC: WASD + 마우스
  • 콘솔: 아날로그 스틱
  • 모바일: 터치 컨트롤

 

4. 기존 입력 시스템과 비교

항목 기존 입력 시스템 향상된 입력 시스템
구조 직접 키 입력 처리 Action 중심 추상화
입력 변경 블루프린트 수정 필요 컨텍스트 교체만으로 처리
상황 인식 없음 컨텍스트 우선순위로 제어
입력 조건 처리 간단한 조건만 가능 다양한 트리거 지원
유지 보수 복잡도 증가 데이터 기반 관리

 

결론

 

향상된 입력 시스템은 단순히 입력을 받아들이는 것 이상의 기능을 제공한다. 앞으로 4달간 언리얼 프로젝트를 진행하면 갈수록 추가되는 기능이 많아질텐데 향상된 입력시스템을 활용하면 편하게 관리할 수 있을 것 같다.