본문 바로가기
언리얼_엔진_게임개발_공부/언리얼 블루프린트

[언리얼/블루프린트] Enhanced Input 향상된 입력

by jaboy 2024. 12. 16.

언리얼 블루프린트 기초 강의를 들으며 궁금한 것이 생겼다. 

플레이어 컨트롤러를 캐릭터에 빙의시키고 사용자 입력으로 캐릭터를 움직이게 하는 부분에 대한 강의를 듣다가 수상하게 생긴 노드를 접했다.

Get EnhancedInputLocalPlayerSubsystem 소환!

 

우선 메모를 해두고, 계속 강의를 듣다가 WASD 로 이동하는 액션을 입력 매핑 컨텍스트에 지정하는 부분에서 또 한 번 내 직관과는 다른 방식을 접했다.

부정? 스위즐?

 

조금 더 자세히 읽어보고 이해하려고 노력했다.

향상된 입력 Enhanced Input

참고 : 언리얼 엔진 도큐멘테이션 

런타임에 인풋 매핑을 다이내믹하게 추가하고 제거하여 인풋에 따른 액션을 더 용이하게 관리할 수 있다고 한다.

하나의 키보드 입력을 받았을 때 플레이어의 상태에 따라 다른 액션을 취하게 하는 방식이다.

 

입력 매핑 컨텍스트 Input Mapping Context

우선순위를 지정하여 같은 입력을 사용하는 여러 액션 간의 충돌 해결

같은 입력 액션에 여러 컨텍스트를 매핑한 경우,
입력 액션이 트리거되면 가장 우선순위가 높은 컨텍스트가 고려되고 다른 컨텍스트는 무시됩니다.

예를 들어, 수영하고 걷고 운전하는 캐릭터에 여러 입력 매핑 컨텍스트를 줄 수 있습니다.
하나는 사용할 수 있으며 항상 동일한 사용자 입력에 매핑되는 일반 액션이며,
다른 하나는 각각의 개별 이동 모드에 대한 것입니다.

개발자는 비히클 관련 입력 액션을 별도의 입력 매핑 컨텍스트에 배치할 수 있으며,
이 입력 매핑 컨텍스트는 차량에 탑승할 때 로컬 플레이어에 추가되고
비히클에서 내릴 때 로컬 플레이어에게서 제거됩니다.

이렇게 하면 최적화에 도움이 되며 부적절한 입력 액션이 실행되지 않도록 하여 버그를 방지할 수 있습니다.
또한, 상호 배타적인 입력 매핑 컨텍스트를 사용하는 것도 입력 충돌 방지에 도움이 되는데,
사용자 입력이 다른 입력 액션에 사용될 때 그 입력이 실수로 잘못된 액션을 트리거하지 않기 때문입니다.

구조 : 입력 액션 - 사용자 입력 - 트리거, 모디파이어

 

1. 데이터 에셋으로 저장된 입력 액션을 선택한다.

2. 해당 액션을 트리거 할 사용자 입력을 목록에서 선택한다.

3. 사용자 입력의 원시 값을 어떻게 필터링하거나 처리할지 트리거와 모디파이어로 결정한다.

 

그런데 모디파이어라는 개념은 조금 생소하다.

 

입력 모디파이어

입력 트리거로 보내기 전에 입력 원시 값을 변경하는 프리-프로세서.

WASD 로 전후좌우 이동하는 액션을 구현할 때 사용하게 되었다.

문자 키 방향키 원하는 입력 해석 필요한 입력 모디파이어
W 위쪽 양의 X축 Swizzle Input Axis Values(YXZ 또는 ZXY)
A 왼쪽 음의 X축 Negate
S 아래쪽 음의 Y축 Negate Swizzle Input Axis Values(YXZ 또는 ZXY)
D 오른쪽 양의 X축 (없음)

 

결론적으로, 부정 (Negate) 은 반대값으로,

스위즐 입력 축 값 (Swizzle Input Axis Values) 은 현재 축이 아닌 다른 축으로 변경하는 것이었다.

 

알고 보니 swizzle 은 '뒤섞다'라는 뜻을 가졌고, 아래 설명에 나온 것처럼 벡터를 변형하는 걸 지칭하기도 한다.

스위즐~ 스위즐~

 

플레이어 컨트롤러에서 게임 스테이트를 가져올 수도 있고, 서브클래스를 만들고 ModifyRaw_Implementation 함수를 오버라이드하여 자신만의 입력 모디파이어를 만들 수 있다고 한다.

 

잘 알아두면 플레이어의 행동을 더 유연하고 다양하게 오류 없이 구현할 수 있을 것 같다~