컨텐츠 검색
[UE5 BP] _#10. Enhanced Input으로 캐릭터 조작 구현하기 - 액터 기준 (X) 컨트롤러 기준 (O)

2025. 11. 27. 17:58Unreal Engine/개념

1. 🧩 문제 상황

처음 캐릭터 이동을 구현했을 때, 이동 벡터를 Get Actor Forward Vector / Get Actor Right Vector로 가져오는 방식을 사용했다.

  • "현재 액터가 바라보는 방향" 기준으로 Forward/Right 벡터를 반환한다.
  • 입력 회전값 없이 Actor 자신의 Transform 회전을 사용한다.
  • 탱크, 차량, 적 AI 같은 "정해진 방향 이동"에 적합하다.

이 방식은 캐릭터가 바라보는 방향을 기준으로 이동을 계산하기 때문에, 다음과 같은 문제가 발생했다.

❌ 액터 기준 이동 구현으로 발생한 문제

  • A, D 키로 좌우 이동을 시도하면 캐릭터가 계속 빙글빙글 도는 조작감이 나타났다.
  • 카메라를 돌린다고 해서 캐릭터는 회전하지 않지만, WASD 입력 방향은
    여전히 캐릭터의 Forward 기준이라 카메라 방향과 입력 방향이 불일치한다.
  • 결과적으로 FPS·TPS 등 3인칭 게임에서 익숙한
    ‘컨트롤러(플레이어 시야) 기준 이동’ 조작감을 만들지 못했다.

이 문제를 해결하기 위해
입력 벡터를 “캐릭터의 회전”이 아니라 컨트롤러의 회전(=카메라 방향) 기반으로 계산해야 했다.

액터 기준 캐릭터 이동 구현


2. 🎯 구현 목적

  • UE5 Enhanced Input 시스템을 활용해
    입력 액션 기반의 캐릭터 조작 구현
  • 컨트롤러 기준 이동 구현을 통해
    플레이어가 기대하는 정확한 조작감 확보
  • 입력 컨텍스트를 상황에 따라 동적으로 수정할 수 있도록
    유연하고 확장 가능한 입력 구조 구성
  • 이동·시야·점프 등 기본 조작을
    에셋 기반으로 정리하여 유지보수성 향상

3. ❓ Enhanced Input이란?

Enhanced Input은 UE5에서 플러그인 형태로 제공되는 새로운 입력 시스템이다.
Input Action 과 Input Mapping Context를 에셋으로 관리하고,
입력을 모디파이어·트리거로 처리할 수 있어 기존 입력보다 훨씬 유연하다.


4. 🚀 Enhanced Input의 장점

✔ 카메라 기반 이동, 조준 모드, UI 모드 등

컨텍스트별 입력 묶음을 쉽게 교체 가능
→ IMC_Default, IMC_Aiming, IMC_UI 등

✔ 플레이 중 입력 매핑을 동적으로 변경

Enhanced Input Local Player Subsystem → Add Mapping Context

✔ 우선순위를 통한 입력 충돌 방지

예: UI 컨텍스트가 활성화되면 게임 입력보다 먼저 처리됨

✔ 트리거/모디파이어 기반 원시 입력 처리

  • Dead Zone: 아날로그 스틱의 경우, 입력이 특정 임계값 이하일 경우 아예 0으로 처리해버려서
    의도치 않은 미세 움직임을 차단한다.
  • Smoothing: 입력 값을 여러 프레임에 걸쳐 부드럽게 보간(Lerp)하거나 완화(Dampen)하여
    입력이 갑자기 튀거나 급격히 변하는 것을 방지한다.
    • Scalar = 2.0 → 입력 감도 2배 (마우스 DPI 상승 효과)
    • Scalar = 0.5 → 입력 감도 절반 (조준 중 감도 감소 효과)
  • 민감도 조절: 입력 값을 일정 비율로 곱해 조작 민감도를 변경한다.
  • Tap(짧게 누르기) / Hold(길게 누르기) / Double Tap(두 번 누르기) 등 복잡한 입력 패턴

✔ 에셋 기반 입력 관리

협업, 유지보수, 기능 확장에 유리


5. 🧱 Enhanced Input의 핵심 구성 요소

🔹 1) 입력 액션 (Input Actions, IA)

입력 단위를 “Key”가 아닌 “행동(Action)”으로 관리하는 에셋

  • Digital / Axis1D / Axis2D / Axis3D
  • Triggered / Ongoing / None 상태 지원
    • Triggered → 이벤트가 한 번 호출됨 (OnTriggered)
    • Ongoing → Tick처럼 지속적으로 호출됨 (OnOngoing)
    • None → 아무것도 아님
  • 블루프린트에서 이벤트로 사용 가능

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

입력 액션들을 묶어 한 컨텍스트로 구성

  • 우선순위 기반 적용
  • 컨텍스트 교체만으로 “조준 모드”, “UI 모드” 등 구현 가능
  • 하나의 입력에 여러 트리거/모디파이어 적용 가능

🔹 3) 입력 모디파이어 (Input Modifiers)

입력 원시 값을 미리 가공하는 역할
예: 스무딩, 감도 조정, Dead Zone, Normalize 등

🔹 4) 입력 트리거 (Input Triggers)

입력이 이번 프레임에 “액션을 발동해야 하는지” 결정

  • 명시(Explicit): 이 트리거가 성공하면 즉시 입력 액션이 발동되는 가장 기본적인 트리거 유형
  • 암시(Implicit): Explicit 트리거가 성공하기 위한 ‘추가 조건’ 역할을 하며 모든 암시 트리거가 충족되어야 발동된다.
  • 블로커(Blocker): 이 트리거가 성공하면 해당 입력 액션은 무조건 발동 실패 처리되어 다른 트리거를 막아버린다.
  • Trigger 상태 제공:
    • Triggered트리거 조건이 완전히 충족되어 이번 프레임에 입력 액션이 발동된 상태.
    • Ongoing → 조건이 일부 충족되어 진행 중이지만 아직 발동 기준에는 도달하지 못한 중간 상태.
    • None → 트리거 조건이 전혀 충족되지 않아 입력이 실패한 상태(기본 상태).

6. ⚙️ 전체 처리 흐름

🟦 1) BeginPlay에서 Enhanced Input Local Player Subsystem 획득

🟦 2) 매핑 컨텍스트(IMC_Default) 추가

🟦 3) Input Action 이벤트 연결

🟦 4) 캐릭터 시점 구현

4.1.) Add Controller Yaw Input

  • 컨트롤러의 Yaw(좌우 회전) 을 변경한다.
  • 보통 마우스 이동(좌/우) 또는 조이스틱 좌우 회전 입력에 대응한다.
  • 캐릭터의 바라보는 방향 또는 카메라의 Yaw 회전을 변경한다.

4.2.) Add Controller Pitch Input

  • 컨트롤러의 Pitch(위/아래 회전) 을 변경한다.
  • 마우스 이동(위/아래) 또는 조이스틱 상하 입력에 대응한다.
  • 1인칭/3인칭 카메라 위아래 보기 구현에 사용된다.

🟦 5) 컨트롤러 기준 캐릭터 이동 구현

5.1) Get Control Rotation

  • 현재 플레이어 컨트롤러(Controller) 의 회전값을 반환한다.
  • 보통 카메라가 바라보는 방향 또는 마우스 입력으로 만든 방향을 의미한다.
  • 캐릭터 이동이 “카메라 기준”으로 동작할 때 핵심적으로 사용된다.

5.2) Get Forward Vector / Get Right Vector

  • 특정한 Rotator 값을 입력받아, 그 회전 기준에서의 정면(Forward) / 오른쪽(Right) 방향 벡터를 계산한다.
  • 자체적으로 회전을 갖고 있지 않고, “입력한 Rotation 기준으로 방향 벡터만 생성”하는 기능이다.
  • Get Forward Vector(컨트롤 로테이션) → 카메라가 바라보는 앞 방향
  • Get Right Vector(컨트롤 로테이션) → 카메라가 바라보는 오른쪽 방향

3) Add Movement Input

  • 캐릭터 또는 Pawn을 특정 방향으로 이동시키는 함수.
  • 입력한 벡터 방향으로 Movement Component에 이동 요청을 보낸다.
  • 예:
    Add Movement Input(ForwardVector, AxisValue) → W, S 등 입력값을 기준으로 앞/뒤 이동.

컨트롤러 기준 캐릭터 이동 구현(이젠 왼쪽키를 눌러도 돌지 않는다..)

🟦 6) 점프 구현

🟦 7) 필수 컴포넌트 설정

✔ Pawn

  • Use Controller Rotation Pitch = OFF: 캐릭터가 위/아래로 따라 고개를 숙이거나 들지 않도록 하고, 카메라만 수직 회전을 담당하게 한다.
  • Use Controller Rotation Yaw = OFF: 마우스(컨트롤러)로 회전해도 캐릭터 본체는 즉시 회전하지 않고, 캐릭터 이동 방향에 따라 자연스럽게 돌아가도록 분리한다.

✔ CharacterMovement

  • Orient Rotation to Movement = ON: 이동 입력 방향(전/후/좌/우)에 맞춰 캐릭터가 자동으로 부드럽게 회전하게 만든다.

✔ SpringArm

  • Use Pawn Control Rotation = ON: 캐릭터 자체는 회전하지 않고, 카메라만 컨트롤러 회전을 따라 움직이도록 설정한다.

7. 💡 배운 점

  • Enhanced Input은 플러그인 기반 시스템이지만,
    UE5에서 사실상 표준 입력 시스템으로 자리 잡았다.
  • 기존 입력 방식보다 액션·컨텍스트 기반 구조라 유지보수성, 확장성, 협업 효율이 월등히 높다.
  • 액터 기준 이동은 3인칭 게임의 조작감을 망치며,
    반드시 컨트롤러 기준 회전값을 이용한 이동 구현이 필요하다.
  • 입력 트리거·모디파이어를 익히면
    탭·홀드·조준 감도 조절 같은 고급 입력 기능도 쉽게 구현 가능하다.
  • 전체 입력 구조를 에셋으로 정리하면서
    프로젝트가 커질수록 더 많은 이점을 제공한다.
기능 Get Forward / Right Vector Get Actor Forward / Right Vector
기준 회전 입력 Rotator (예: 컨트롤 로테이션) Actor의 현재 회전값
사용 목적 카메라 방향 이동, 회전 기반 계산 캐릭터가 실제 바라보는 방향 기준 계산
대표 사용 사례 “카메라 기준 이동” 구현 “캐릭터 기준 이동” 구현
입력 필요 여부 Rotator 필요 입력 불필요
예시 Get Forward Vector(Get Control Rotation) Get Actor Forward Vector(Self)