일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Smart Pointer
- lua
- std::async
- Effective c++
- more effective c++
- c++
- exception
- effective modern c++
- 암시적 변환
- iterator
- reference
- 스마트 포인터
- 언리얼
- 티스토리챌린지
- 보편 참조
- 오블완
- 게임
- virtual function
- 상속
- 예외
- operator new
- resource management class
- UE4
- 반복자
- universal reference
- 영화
- effective stl
- 영화 리뷰
- implicit conversion
- 참조자
- Today
- Total
스토리텔링 개발자
[UE4] 입력 본문
개요
언리얼의 입력 체계에 대해 알아보도록 하겠습니다.
맵핑과 바인딩의 차이에 대해 기록할 예정입니다.
PlayerInput / InputComponent
각 아래의 작업을 처리합니다.
PlayerInput
플레이어 컨트롤러(PlayerController)의 키 맵핑을 관리합니다.
아래의 특성을 가집니다.
- 클라이언트에서만 스폰됩니다.
- ActionMapping / AxisMapping 을 지원합니다.
InputComponent
액터의 키 바인딩을 관리합니다.
바인딩 로직은 델리게이트로 연결합니다.
직관적으로는 키와 로직을 직접 연결하면 될 것 같으나,(두 단계)
실질적으로는 세 가지 단계를 거치며 입력이 처리됩니다.
직관
키 - 로직
UE4
키 - 별명(매핑) - 로직(바인딩)
예를 들자면 스페이스 키로 점프를 시키는 경우,
직관으로는 아래와 같이 정리됩니다.
스페이스 키 - 점프
하지만 UE4에선 사이에 매핑이라는 과정이 추가로 존재합니다.
키 맵핑(Key Mapping)
매핑이란 그저 키에 이름(별명)을 붙이는 것에 불과합니다.
그럼 매핑은 왜 해야 하는 걸까요.
매핑의 장점은 아래와 같습니다.
- 같은 이름(한 가지 기능)에 여러 키를 할당할 수 있습니다.
- 이름(기능)에 할당된 키를 바꾸고자 하면 쉽게 바꿀 수 있습니다.
- 키로 축을 흉내내도록 매핑하여, 패드와 키보드를 쉽게 대응할 수 있습니다.
즉 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 가 입력을 받으면, 그 아래로는 입력을 처리하지 않습니다.
우선순위는 아래와 같습니다.
- 인풋 기능이 활성화된 액터(최근 활성화된 순)
- 특정 액터에 입력 처리를 가장 먼저 하고 싶으면 "Accepts input" (입력 받음) 을 재활성화시키면 우선순위가 가장 높아집니다.
- 컨트롤러
- 레벨 스크립트
- 폰
'개발 > 언리얼 엔진' 카테고리의 다른 글
[UE4] 메시(Mesh) (0) | 2022.03.21 |
---|---|
[UE4] 게임 인스턴스(Game Instance) (0) | 2022.03.10 |
[UE4] 데칼(Decal) (0) | 2022.02.17 |
[UE4] LOD(Level Of Detail) (1) | 2022.02.14 |
[UE4] 애니메이션 에셋(Animation Asset) (0) | 2022.01.27 |