김디트 2022. 2. 22. 18:22
728x90

개요

언리얼의 입력 체계에 대해 알아보도록 하겠습니다.

맵핑과 바인딩의 차이에 대해 기록할 예정입니다.

 

 

 

PlayerInput / InputComponent

각 아래의 작업을 처리합니다.

 

PlayerInput

 

플레이어 컨트롤러(PlayerController)키 맵핑을 관리합니다.

아래의 특성을 가집니다.

  • 클라이언트에서만 스폰됩니다.
  • ActionMapping / AxisMapping 을 지원합니다.

 

InputComponent

 

액터키 바인딩을 관리합니다.

바인딩 로직은 델리게이트로 연결합니다.

 

직관적으로는 키와 로직을 직접 연결하면 될 것 같으나,(두 단계)

실질적으로는 세 가지 단계를 거치며 입력이 처리됩니다.

 

직관

키 - 로직

 

UE4

키 - 별명(매핑) - 로직(바인딩)

 

예를 들자면  스페이스 키로 점프를 시키는 경우,

직관으로는 아래와 같이 정리됩니다.

 

스페이스 키 - 점프

 

하지만 UE4에선 사이에 매핑이라는 과정이 추가로 존재합니다.

 

 

 

키 맵핑(Key Mapping)

매핑이란 그저 키에 이름(별명)을 붙이는 것에 불과합니다.

 

키 맵핑을 하는 모습

그럼 매핑은 왜 해야 하는 걸까요.

매핑의 장점은 아래와 같습니다.

 

  1. 같은 이름(한 가지 기능)에 여러 키를 할당할 수 있습니다.
  2. 이름(기능)에 할당된 키를 바꾸고자 하면 쉽게 바꿀 수 있습니다.
  3. 키로 축을 흉내내도록 매핑하여, 패드와 키보드를 쉽게 대응할 수 있습니다.

PlayerInput이름 - 키 의 연결들을 관리하는 주체입니다.

 

 

 

키 바인딩(Key Binding)

위의 매핑의 장점에서 볼 수 있듯,

이름(별명)과 기능는 1:1로 매칭합니다.

 

키 바인딩은 이름에 기능을 연결시키는 걸 의미합니다.

 

위의 예를 다시 차용하면,

 

스페이스 키 - 점프

 

'점프' 로직을 '스페이스 키'에 연결하고 있는데 키 바인딩은 이 연결을 말합니다.

물론 언리얼에서는 키에 직접 연결하는 것이 아니라 맵핑을 통한 이름(별명)에 연결하게 됩니다.

 

스페이스 키 -(키 맵핑)- "Jump" -(키 바인딩)- OnBeginJump

 

InputComponent 는 이 키 바인딩들을 관리합니다.

 

아래는 바인딩의 예시입니다.

 

InputComponent->BindAxis("MoveForward", this, &ASampleCharacter::MoveForward);
InputComponent->BindAction("Jump", IE_Pressed, this, &ASampleCharacter::OnBeginJump);

 

 

 

 

InputComponent 우선순위

PlayerInput은 플레이어 컨트롤러마다 있으므로, 한 클라이언트당 하나의 맵핑이 존재합니다.

그에 반해 InputComponent는 어디든 붙일 수 있습니다.

 

그러므로 각 InputComponent들은 우선순위를 따져서 입력을 처리해야 할 것입니다.

한 InputComponent 가 입력을 받으면, 그 아래로는 입력을 처리하지 않습니다.

 

우선순위는 아래와 같습니다.

 

  1. 인풋 기능이 활성화된 액터(최근 활성화된 순)
    1. 특정 액터에 입력 처리를 가장 먼저 하고 싶으면 "Accepts input" (입력 받음) 을 재활성화시키면 우선순위가 가장 높아집니다.
  2. 컨트롤러
  3. 레벨 스크립트

InputComponent 우선 순위 처리

728x90