4.18.2014

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

PixARK Dev Kit으로 만드는 나만의 복셀 월드

에픽게임즈 런처에서 Snail Games가 제공한 모드 제작 툴로 재밌는 PixARK 월드를 만들어보세요.

Drive Studio, 언리얼 엔진으로 Fox Sports의 2018 FIFA 월드컵 방송 제작

Drive Studio는 언리얼 엔진의 강력함을 활용해 FOX Sports 채널의 2018 FIFA 월드컵 중계에서 사용할 배경, 중간...

REWIND, 언리얼 엔진으로 가상의 Hacker Hostel에 생명을 불어넣다

가상현실 속에서 Silicon Valley의 Hacker Hostel을 방문해 장난감을 가지고 놀고, 음식을 맛보고, 마음껏 놀아 보세...