본문 바로가기
Unreal 게임 개발/Unreal Tool 활용

Unreal Enhanced Input (향상된 입력) - 2

by daisy0461 2023. 1. 24.

Content 브라우저에서 마우스 우클릭을 한 후 Input->Input Action 선택으로 Input Action을 만들 수 있다.

 

Input Action

생성된 것을 들어가보면 다음과 같이 나타난다.

Value Type에는 총 4가지가 있다. Bool, float, Vector 2D, Vector가 있다. 드롭다운을 클릭해보면 확인할 수 있다.

 

이제 Pawn Class가 Trigger된 Input Action에 응답하게 하려면 BluePrint에 이벤트를 추가해야한다.

BluePrint에서 NewInputAction을 검색하면 방금 만들었던 Input Action을 찾을 수 있다.

여기서 NewInputAction이라고 검색한 이유는 내가 방금 만든 Input Action의 이름이 NewInputAction이기 때문이다.
이름이 만약 A라면 A를 검색하고 Enhanced Action Event의 하위에 있는 것을 찾아서 선택하면 된다.

만약 같은 이름의 InputAction이 다른 Folder에 있다면 두개가 나타난다.

각각 다른 Folder에 같은 이름으로 했을 때 나오는 결과이다.

이때는 마우스를 위에 올려서 어떤 폴더에 있는지 확인하는 방법이 있다.

물론 이름이 겹치지 않는것이 제일 좋다.

 

BluePrint 노드를 살펴보면

다음과 같이 나타난다.

Action Value는 Input Action에서 지정한 Value Type과 동일한 Type이 Return된다.

 

이제 Input Mapping Contexts를 살펴보자

 

Contents 브라우저에 IMC라고 되어 있는 것이 Input Mapping Context의 줄임말이다.

한눈에 Input Mapping Context임을 알기 위해 IMC라는 것을 붙인다.

이것을 켜고 확인해보면

Jump, Move, Look이 Mapping되어 있는 것을 확인할 수 있다.

Jump의 드롭다운을 펼쳐보면 다양한 값들이 들어가 있는데 저 값들이 Input 되면 IA_Jump를 실행하는 것이다.

Space Bar의 드롭다운을 펼쳐보면 Tirggers, Modifers가 나타난다.

이 상태에서는 Space Bar를 누르면 Jump가 실행된다.

Trigger에 Released를 사용하면 Space Bar를 release할 때 점프가 실행된다.

이런 Trigger와 Modifier는 하나뿐만아니라 여러개를 가질 수 있다.

도큐먼트에 나온 예시를 쉽게 풀어서 설명을 하자면

Thumbstick은 게임 패드의 스틱이라고 생각하면 된다.

Run Action은 여러가지 Input Action으로 실행될 수 있으며 그 중 하나가 Gamepad Left Thumbstick 2D이다.

이 스틱으로 들어오는 Raw value는 "Dead Zone"이라는 Modifier를 먼저 통과를 하게 되는데

Lower Threshold보단 값이 커야하고 Upper Threshold보단 값이 작아야한다.

이 값들은 스틱의 센터로 부터 얼마나 떨어져있냐는 Raw value가 들어오면 계산을 해서 Modifier를 통과하게 된다.

그 후 통과가 되면 "Run Action"이라는 Input Action을 수행하기 위해 "Hold" Trigger가 되어 있으면 실행하게 된다.

 

이런 Input Mapping Contexts는 하나의 플레이어에게 여러 개를 넣을 수 있다.

예를 들어 플레이어가 걷기, 수영, 운전이 가능하다면

플레이어가 차량에 탑승할 때 플레이어에게 운전 IMC를 추가하고 차에서 내릴 때 IMC를 제거하는 식으로 사용할 수 있다.

위와 같이 사용을 Input 충돌이 방지되기 때문에 버그를 최적화하고 방지하는데 도움을 준다.

 

이 과정을 다 거치면 Player Controller와 연결된 Local Player에 추가할 수 있다.

Blueprint에 들어가서

Get Player Controller

Get Controller를 PlayerController로 Cast하거나 Get Player Controller를 사용하면 Player Controller를 얻을 수 있다.

다음과 같이 설정을 하면 게임을 시작할 때 Player Controller를 얻는다.

그 이후 As Player Controller를 Enhanced Input Local Player Subsystem에 연결을 하는데

이 이유는 여기에 Player Controller를 연결해야 Enhanced Input System을 사용할 수 있다.

 이를 통해 Input Mapping Context를 추가할 수 있고 이어진 Player Controller와 연결해서 사용할 수 있다.

이 Subsystem을 들고온 후에는 Add Mapping Context, Remove Mapping Context 등 Mapping Context와 관련된 BP노드를 사용할 수 있다.

Add Mapping Context의 경우 Mapping Context를 Select해서 넣어줘야 해당 Mapping Context가 선택되서 추가가 된다.

물론 variable을 통해 연결해서 들고올 수도 있다.

C++에서 Player Controller를 받아 Add Mapping Context를 하는 순서이다.

Controller를 Cast하고 Subsystem을 받아오고 AddMappingContext를 하는 것을 알 수 있다.

첫번째 파라미터는 Input Mapping Context의 이름으로 위 코드에서는 DefaultMappingContext를 선택했고 우선순위를 0으로 지정했다. 이 우선순위는 값이 클 수록 먼저 선택이 된다.