내일배움캠프 46일차 - 언리얼 C++: Pawn을 이용해 비행체를 만들어보자
Pawn클래스를 이용한 비행체 만들기
Pawn클래스에 EnhancedInput을 사용해 입력에 따라 정해진 행동을 취할 수 있는 비행체를 만들어보도록 하자.
향상된 입력(Enhanced Input)
과거 UE4시절에는 프로젝트세팅에 들어가 필요한 입력키를 일일이 할당했으나 UE5에서는 향상된 입력(EnhancedInput)이란 기능이 도입되면서 파일 단위로 입력을 관리할 수 있게 되었다.
해당 기능을 사용하기 위해서는 아래에 두 데이터 에셋을 추가하도록 한다.
입력 매핑 컨텍스트(IMC, InputMappingContext): 컨트롤러가 사용할 입력들을 한데 모아 놓은 에셋
: 가져온 IA에 키를 할당하고 작동 방식을 정의할 수 있다.
입력 액션(IA, InputAction)
: 특정 행동을 나타내는 액션, 주로 입력받을 값의 타입을 정의한다. (bool, float, Vector2D 등...)
캐릭터에는 일반적으로 이동(WASD키), 카메라회전(마우스 XY이동)을 사용하므로 두 기능을 넣은 IMC를 만들어보자.
| IA(카메라회전, 캐릭터이동), IMC(비행체의 조작그룹) |
| 부정: 입력값을 반전시킨다. ex) +입력을 -입력으로 바꿈. 스위즐 입력 축 값: 입력받는 값의 순서를 바꾼다. ex) X→Y→Z 대신 Y→X→Z로 순서를 바꿈 |
이렇게 생성한 입력에셋들은 컨트롤러에서 먼저 매핑을 받고, Pawn클래스에서 제공하는 SetupPlayerInputComponent()로 매핑된 입력의 기능을 추가시킨다.
이후 비행기 Pawn에서 입력에 대응되는 함수를 만들어 입력값에 대응되는 행동을 작성하면 된다. 이때, 함수의 매개변수로 FInputActionValue가 사용된다.
| #include "InputActionValue.h"를 불러와야한다. |
지면에 착지를 했다는 것은 지면과 충돌했다는 것을 의미하므로 비행기를 이루는 콜리전에 이벤트를 삽입해주어야 한다. 이를 위해 BeginPlay에서 해당 컴포넌트에서 구비된 Delegate에 AddDynamic을 사용하여 함수를 바인딩 해준다.
| AddDynamic은 매크로의 일종이므로 InteliSence에 노출되지 않아 직접 입력해야한다. |

| 바인딩 함수에 필요한 매개변수는 해당 Delegate를 F12로 PrimitiveComponent.h까지 거슬러 올라가서 확인할 수 있다. |
따라서 비행기에서 수직으로 내려가는 LineTrace를 작성하여 충돌을 한번 더 검사해야 할 것이다.
| LineTraceSingleByChannel의 사용법 |
위의 기능을 토대로 응용해나가면 다음과 같은 결과물을 만들어낼 수 있다.
댓글
댓글 쓰기