[UE5] Input Action / Input Mapping Context

kkado·2024년 2월 20일
0

UE5

목록 보기
16/61
post-thumbnail

이전 글에서 PlayerController를 활용해서 특정 키를 입력하면 특정 동작을 수행하는 로직을 구현해 보았다.

언리얼 엔진에서는 이보다 더 자세한 입력을 지원하는 '향상된 입력 이벤트' (Enhanced Input)를 설정할 수 있다.
예컨대 많은 키를 동시에 누른다거나, 어떤 키를 몇 초간 누른다거나, 어떤 키들을 순서에 맞게 누른다거나 하는 등의 입력은 액션 게임 등에서 많이 사용되곤 한다.

또한, 런타임에서 상황에 따라 키매핑이 달라지는 경우에도 Enhanced Input을 사용하면 키매핑을 쉽게 변경할 수 있다.
예컨대 걸어 다니는 캐릭터가 탈것에 탑승하면 움직임 로직이 달라질 것이고, 경적을 울리는 등의 추가적인 기능에 대한 키매핑이 요구될 것이다.

Input Action을 통한 점프 구현

Input Action 생성

Add -> Input -> Input Action을 생성한다. 'IA_Jump' 라는 이름으로 생성했다.

더블클릭하여 열어보면 다음과 같은 디테일 패널을 볼 수 있다.

'Value Type' 프로퍼티는 이 액션이 컨트롤할 입력의 유형을 나타낸다.

  • Digital : 키 입력 or 미입력, 0 or 1로 나타내어지는 입력이 해당한다. 평범한 키 입력이다.
  • Axis1D : 숫자 1개 (1차원) 로 나타낼 수 있는 입력이다. 마우스 휠 등이 해당한다.
  • Axis2D : 숫자 2개 (2차원) 로 나타낼 수 있는 입력이다. 조이스틱이나 마우스의 움직임 등이 여기에 해당한다. 2차원 벡터로 나타낸다.
  • Axis3D : 숫자 3개 (3차원) 로 나타낼 수 있는 입력이다. VR 기기의 움직임 등이 해당한다. 3차원 벡터로 나타낸다.

스페이스바를 이용한 점프를 구현할 것이므로 Digital로 설정한다.

PlayerController에 연결

기존에 연결되어 있던 'Space Bar' 이벤트 노드를 제거하고, 직접 만든 'IA_Jump' 노드를 연결한다. IA_Jump 트리거가 발생하면 점프 함수를 실행한다는 뜻이다.

Input Mapping Context

아직 어떤 키를 눌러서 IA_Jump 이벤트를 트리거할지 설정하지 않았다.
Input Mapping Context란, 어떤 키를 누르면 어떤 이벤트를 발생시킬지에 대한 매핑 정보를 모아 놓은 하나의 키매핑 정보이다.

Add -> Input -> Input Mapping Context 로 'IMC_Walk' 라는 컨텍스트를 생성했다.

더블클릭하면 심플한 패널이 나온다.

Mappings에 + 버튼을 클릭하여 새 매핑을 추가한다.

첫 번째 드롭다운에서 내가 만든 인풋액션명을 넣고, 해당 이벤트를 트리거할 키를 입력한다.
스페이스바로 할당해 둔 모습이다.

IMC 연결

이제 어떤 상황에서 어떤 IMC를 사용할지 설정해 주어야 한다.
상황에 따라 키매핑을 바꿀 수 있음이 IMC가 가지는 이점이므로, 이 역시 PlayerController보다는 Character 블루프린트에서 정의하는 것이 올바를 것이다.

먼저 'Get Player Controller' 함수를 이용해 현재 플레이어의 캐릭터가 이용하고 있는 PlayerController를 가져오고, 곧이어 'Enhanced Input Local Player Subsystem' 노드를 이용해 해당 PlayerController가 사용중인 Enhanced Input System을 가져온다.

이후 'Add Mapping Context' 노드에서 'Mapping Context' 핀에 'IMC_Walk' 를 설정하고, 이를 BeginPlay 노드에 연결한다.

즉, 이 로직을 요약하자면 '게임이 시작될 때 플레이어가 사용하는 키매핑을 IMC_Walk로 설정한다.' 라고 할 수 있다.


이제 실행하면 스페이스 바를 누르면 이전처럼 잘 점프하는 것을 확인할 수 있다.

profile
울면안돼 쫄면안돼 냉면됩니다

0개의 댓글