ENHANCED INPUT C++

Enhanced Input C++ 우선순위

Enhanced Input은 Input Action asset을 만든 뒤 함수에 바인딩한다고 끝나지 않는다. Local Player Subsystem에 Mapping Context를 추가하고, 우선순위와 입력 모드, Triggered/Started/Completed 이벤트를 플레이 상태에 맞춰 바꿔야 한다.

01

Action 설계

Move, Look, Jump처럼 의미 단위로 Input Action을 만들고 값 타입을 맞춘다.

Axis2D와 Boolean을 섞으면 바인딩 코드가 흔들린다
02

Context 등록

BeginPlay나 possession 시점에 Local Player Subsystem을 찾아 Mapping Context를 추가한다.

서버나 AI pawn에는 local player가 없을 수 있다
03

우선순위 조정

Gameplay, Vehicle, Menu context가 충돌할 때 priority와 remove/add 순서를 관리한다.

메뉴가 열렸는데 이동이 되면 context가 남은 것이다
04

이벤트 바인딩

SetupPlayerInputComponent에서 EnhancedInputComponent로 캐스팅하고 Trigger 이벤트를 함수에 연결한다.

Started와 Triggered의 호출 빈도가 다르다
05

입력 모드 전환

UIOnly, GameOnly, GameAndUI 전환과 mouse cursor, focus를 함께 맞춘다.

입력 context와 Slate focus는 별개로 깨질 수 있다
Subsystem
Local Player 기준 Mapping Context는 로컬 플레이어 subsystem에 등록되어야 한다.
controller만 보고는 놓치기 쉽다
Priority
동시 context 충돌 메뉴, 차량, 전투 입력이 겹치면 높은 우선순위가 먼저 해석된다.
상태 전환 때 제거도 중요하다
Trigger
호출 시점 Started, Ongoing, Triggered, Completed를 입력 의미에 맞게 고른다.
매 프레임 호출되는 이벤트에 무거운 로직을 넣지 않는다
Mode
UI와 게임 전환 Input Mode, cursor, focus, mapping context가 같은 상태를 가리켜야 한다.
UI만 열어도 gameplay action이 남을 수 있다

입력 확인

Context 로그 상태 전환마다 추가/제거된 Mapping Context와 priority를 출력한다.
이벤트 빈도 Triggered가 매 프레임 호출되는지, Started가 한 번만 호출되는지 확인한다.
멀티플레이 서버와 클라이언트에서 입력 등록 시점과 Local Player 존재 여부를 분리해 본다.