향상된 입력은 UE에서 기존 입력 시스템으로는 불가능했던 많은 기능을 제공합니다. 기존 입력 시스템(Action/Axis mappings)은 매우 획일적이어서 대규모 프로젝트의 경우 매우 빠르게 다루기 힘들어질 수 있었습니다. 아날로그 스틱에 대한 데드존 지원이 내장되어 있지 않았고 리팩터링도 어려웠습니다. 게다가 플레이어의 현재 상태를 고려한 컨텍스트 키 매핑을 구현할 수 있는 방법이 내장되어 있지 않았습니다.
향상된 입력을 사용하면 플레이어의 런타임에 '컨텍스트 매핑'을 추가 및 제거할 수 있어 많은 수의 '액션'을 훨씬 쉽게 관리할 수 있습니다. 이를 통해 플레이어의 현재 상태에 따라 특정 입력의 동작 방식을 매우 쉽게 변경할 수 있습니다. 예를 들어 걷고, 전력 질주하고, 엎드려 있을 수 있는 플레이어가 있다고 가정해 보겠습니다. 각 캐릭터 이동 유형에 대해 '매핑 컨텍스트'를 바꿔서 CTRL 키가 다른 작업을 수행하도록 할 수 있습니다. 걷는 동안 CTRL 키를 누르면 몸을 웅크려야 합니다. 전력 질주하는 동안 CTRL 키를 누르면 미끄러집니다. 엎드린 상태에서 CTRL을 누르면 다시 일어서야 합니다.
향상된 입력은 전적으로 플러그인 친화적이며, 게임플레이 기능 플러그인을 통해 입력 매핑을 아주 간단하게 추가할 수 있습니다. 즉, 플러그인 내에서 모든 입력 로직을 캡슐화하여 동적으로 끄고 켤 수 있습니다. 예를 들어, 게임에 "차량"이라는 게임플레이 기능을 추가한다고 가정해 보겠습니다. "VehicleX"용 게임플레이 기능 플러그인을 만들고 해당 플러그인 내에 입력 에셋을 추가하면 기본 게임 구성 파일을 수정할 필요 없이 모든 "VehicleX" 코드를 하나의 플러그인에 완전히 캡슐화할 수 있습니다.
이전 시스템과의 역호환성 ### 이전 시스템과의 역호환성
향상된 입력은 이전 입력 "액션 및 축" 매핑과 완벽하게 역호환됩니다. DefaultPlayerInputClass 와 DefaultInputComponentClass 를 각각 UEnhancedPlayerInput 과 UEnhancedInputComponent 에 기반한 것으로 변경하기만 하면 됩니다.
향상된 입력과 기존 입력 시스템의 가장 큰 차이점 중 하나는 모든 것이 한 곳(DefaultInput.ini)에 정의되어 있지 않고 다양한 데이터 애셋을 기반으로 작동한다는 점입니다. 따라서 입력 로직을 더 쉽게 구성할 수 있을 뿐만 아니라 입력 관련 코드를 게임 피처 플러그인 내에 캡슐화하여 관리하기가 더 쉬워집니다.
UE 5.1부터 향상된 입력은 기본적으로 켜져 있습니다. 콘텐츠 브라우저의 "Input" 카테고리에서 입력 애셋을 생성할 수 있습니다.
https://ue-cdn.artstation.com/imgproxy/nrFptm_Ragvay_WyVSAC2jqnUnO-uX42lbwfQBfjHO0/filename:2022-06-10+18_41_10-Lyra+[Debug]+-+Unreal+Editor.png/resizing_type:fit/width:1920/height:1080/aHR0cHM6Ly9kMWl2N2RiNDR5aGd4bi5jbG91ZGZyb250Lm5ldC9pbWFnZXMvYTQ1YzY4MzctZTQyNy00ZjNmLWIxNGEtY2I4ZjgyNDNjMGU0LzIwMjItMDYtMTAtMThfNDFfMTAtbHlyYS1kZWJ1Zy11bnJlYWwtZWRpdG9yLnBuZw
입력 액션은 데이터 에셋이라는 점을 제외하면 "Action" 및 "Axis" 매핑 이름과 개념적으로 동일합니다. 각 입력 액션은 "웅크리기" 또는 "무기 발사"와 같이 사용자가 할 수 있는 동작을 나타내야 합니다. 블루프린트나 C++에서 이 입력 액션의 상태가 변경될 때 리스너를 추가할 수 있습니다.
입력 액션은 동작을 결정하는 여러 가지 "유형"이 있을 수 있습니다. 간단한 "부울" 액션을 만들거나 더 복잡한 3D 축을 만들 수 있습니다. 액션의 유형에 따라 액션에서 얻을 수 있는 값이 결정됩니다. 부울 액션은 단순한 부울 값, 축1D는 실수 값, 축2D는 FVector2D, 축3D는 전체 FVector를 갖습니다.
"켜짐" 또는 "꺼짐" 상태만 있는 사물이 있을 때는 "bool" 액션을 사용해야 합니다. 이는 레거시 입력 시스템의 이전 "Action" 매핑과 동일합니다. 게임패드 thumbstick값과 같은 것의 경우 2D 축 액션을 사용하여 thumbstick 위치의 X 및 Y 값을 유지할 수 있습니다. 3D 축을 사용하여 모션 컨트롤러 정보와 같은 더 복잡한 데이터를 보유할 수 있습니다.
https://ue-cdn.artstation.com/imgproxy/vOYREJ5a-1oBRc3-S33UWXlp51GjRAc_XZMcBSV3pLY/filename:ia_test_details.png/resizing_type:fit/width:1920/height:1080/aHR0cHM6Ly9kMWl2N2RiNDR5aGd4bi5jbG91ZGZyb250Lm5ldC9pbWFnZXMvZjE5YTk0MWQtOTI0ZS00YmM2LWE2OTQtNDZkNTI3M2QwZDI2L2lhX3Rlc3RfZGV0YWlscy5wbmc
https://ue-cdn.artstation.com/imgproxy/tcsTkqG04S2q-rvBRlyPvBSshLGFfLMnZ6pGZg6-W1E/filename:input_actions_lyra.png/resizing_type:fit/width:1920/height:1080/aHR0cHM6Ly9kMWl2N2RiNDR5aGd4bi5jbG91ZGZyb250Lm5ldC9pbWFnZXMvMTFlMWM1NjItNjNhOC00OTY4LWE2NTQtMzVlZTg2MjI0NmU3L2lucHV0X2FjdGlvbnNfbHlyYS5wbmc