2014-4-18

UE4 의 입력 동작 및 축 매핑

By * Marc Audy

언리얼 엔진 4 에서는 입력 이벤트 바인딩을 가급적 쉽게 만들고자 했습니다. 그를 위해 Input Action and Axis Mappings (입력 동작 및 축 매핑) 섹션을 만들었습니다. 물론 이벤트에 직접 키 바인딩을 시킬 수도 있지만, 매핑을 사용하는 편이 입력 구성을 위해 가장 유연하고 편리한 방식임을 확신시켜 드릴 수 있습니다.

동작 및 축 매핑이 뭔가요?

동작 및 축 매핑은 입력 행위와 그것을 실행하는 키 사이에 간접 레이어를 삽입함으로써 키와 축을 입력 행위에 편리하게 매핑시키는 메커니즘을 제공합니다. 동작 매핑은 키 누르고 뗴는 데 대한 것이고, 축 매핑은 연속적인 범위가 있는 입력에 대한 것입니다.

키에 직접 바인딩하는 대신 매핑을 사용해야 하는 이유는 뭔가요?

입력 매핑을 사용하면 한 번의 바인딩으로 같은 행위에 대해 다수의 키를 매핑하는 것이 가능합니다. 프로젝트 레벨에서 기본 설정 관련 변심이 있었든, 사용자가 키 바인딩 UI 를 통해서든, 행위에 매핑된 키를 리매핑하는 작업도 쉬워집니다. 마지막으로 입력 매핑을 사용하면 축 입력이 아닌 입력 키(, 예로 [-1,1] 범위의 게임패드 엄지스틱 축)를 한 축의 컴포넌트(, 예로 전형적인 FPS 콘트롤에서의 앞뒤인 WS)로 해석하는 것이 가능합니다.

멋진데요. 셋업 방법은 어떻게 되죠?
Engine Input

엔진 프로젝트 세팅의 입력 섹션에서는 기존 매핑 목록을 확인하고 새로운 매핑을 만들 수 있습니다.

동작은 꽤나 단순합니다: 동작에 이름을 짓고, 그 동작에 매핑시키고자 하는 키를 추가한 다음, 그 키와 동시에 누르고자 하는 키를 지정합니다. 축 매핑 역시도 상당히 단순합니다. 동시 입력 키를 지정하는 대신, 스케일을 지정합니다. 스케일은 축의 값을 합할 때 키의 값에 적용되는 배수입니다. 이 기능은 키보드 키에서 축을 만들고자 할 때 특히나 유용합니다 (예를 들어 W 는 게임패드 스틱의 위, S 는 아래를 누르는 것을 나타냅니다).

매핑을 조금 정의했는데, 어떻게 사용하나요?

매핑은 블루프린트와 C++ 에서 행위에 바인딩 가능합니다.

C++ 에서는 거의 보통 Pawn/Character::SetupPlayerInputComponent 또는 PlayerCharacter::SetupInputComponent 함수 안에서 바인딩 셋업을 하지만, InputComponent 가 있는 곳이면 어디든 가능합니다. 바인딩은 InputComponent 에서 BindAction/Axis 를 호출하는 것으로 이루어집니다.

InputComponent->BindAxis("MoveForward", this, &ASampleCharacter::MoveForward);

InputComponent->BindAction("Fire", IE_Pressed, this, &ASampleCharacter::OnBeginFire);

InputComponent->BindAction("Fire", IE_Released, this, &ASampleCharacter::OnEndFire);

블루프린트에서는 Actor 블루프린트의 팔레트나 맥락 메뉴의 Input 섹션에서 Axis 또는 Action Event 노드를 놓는 것으로 가능합니다.

Blueprint AxisBlueprint Screen 2

C++ 와 블루프린트 양쪽에서, Axis 이벤트는 매 프레임 발동되어 Axis 의 현재 값을 전달하는 반면 Action 이벤트는 키 입력에 따라 Pressed 또는 Released 출력이 발동됩니다.

Axis 의 값은 해당 프레임 내 각 키 상태의 값의 합입니다. 즉 위의 MoveForward 의 경우, W 키만 누르고 있었다면 Axis 값은 1 이 되지만, W 와 S 를 동시에 눌렀다면 Axis 값은 0 이 될 것입니다. 참고로 W 와 Up 를 동시에 눌렀다면 값은 2 가 될 것이므로, 바인딩된 함수에서 값을 제한시켜 주는 것이 좋습니다.

Pressed 나 Released 이벤트에만 바인딩된 Action 은, 거기에 매핑된 키를 누르고/뗄 때마다 발동됩니다. 하지만 Paired Actions (즉 Pressed 와 Released 두 함수 모두 바인딩된 동작)의 경우, 처음 눌리는 키가 동작을 캡처한 것으로 간주합니다. 한 키가 동작을 캡처하면, 해제될 때까지 다른 바인딩된 키의 Press / Release 이벤트는 무시될 것입니다.

그게 다에요?

다른 중요한 입력 개념 (중 일부는 입력 문서 참고)에는 입력 스택, 어느 액터의 입력을 기본적으로 켤 것인지와 다른 액터에 대한 입력을 켜는 법, 입력 소모 작동방식 등이 있으나, 나중에 자세히 알아보는 것으로 하겠습니다.

프로젝트의 입력 셋업시 '동작 및 축 매핑'을 사용하는 것이 최선의 방법이라는 확신을 드렸기 바랍니다. 아니어도 괜찮습니다! Key 에 직접 바인딩하는 것이 더 편리하다면 언제든 가능하며, 값이 필요할 때 Actions 와 Axes 를 사용하여 변환하면 됩니다.

문제가 있으신가요? 저희 포럼(영문) 에 글을 남겨 주세요. 기꺼이 돕겠습니다!

Recent Posts

리얼타임 기술의 잠재력을 선보인 Theia Interactive의 Harley Davidson AR

증강 현실은 리얼타임 프로젝트 샘플을 통해 비즈니스 고객들을 설득하는 중요한 도구로 자리잡았습니다. Theia Interactive가 ...

2018년 4월 NVIDIA Edge 프로그램 수상자

4월에도 NVIDIA Edge 프로그램에 멋진 작품들이 많이 제출되었으며, 그 중에서 세 개의 작품을 뽑아 수상작으로 선정하였습니다. ...

언리얼 엔진으로 BMW 차량 디자인에 혼합 현실 구현

리얼타임 기술과 VR이 자동차 제조의 새로운 시대를 열고 있는 가운데, 자동차 디자인 분야는 빠르게 변화하고 있습니다. BMW와 MIN...