🎮Unreal4/C++

[UE4] Player 이동, 회전 (MoveForward, MoveRight, OnHorizontalLook, OnVerticalLook, Walk, Run)

공대 컴린이 2023. 2. 28. 20:02
728x90

🚩 ACharacter - CPlayer 클래스 함수 선언

캐릭터의 움직임과 회전을 구현하기 위해 ACharacter 를 상속받는 Player 클래스에 함수들을 추가하였다.

 

가장먼저, 방향키 등의 입력값을 받아오기  위해 Input Component 헤더파일을 추가하였다.

 

ACharacter의 SetupPlayerInputComponent 함수를 재정의하여 사용하였는데, 이 함수는 기본적인 Player Controller를 사용하여 입력값을 받을 수 있다.

🚩 Move Forward, Move Right

BindAxis 함수를 통해 축과 이벤트를 연결할 수 있다. 이때 이벤트는 함수포인터를 통해 연결하기 때문에 this 객체와 함수의 주소를 전달한다. (MoveForward, MoveRight, HorizontalLook 등등,, 프로젝트 셋팅의 축매핑 들이다)

SetupPlayerInputComponent는 이벤트를 바인딩하여 호출하는 디스패처와 같은 역할을 한다.

 

카메라의 전방방향을 구해 플레이어를 앞뒤, 양옆으로 움직이기 위해 ControlRotation을 가져와 Yaw 값만 사용하여 AddMovementInput 함수로 플레이어를 이동시켰다.

 

이때 Rotator에서는 전방을 구할 Forward같은 벡터가 없다. 그러나 Rotator를 Quat(quaternion)로 변경하면 Forward 벡터를 추출할 수 있으므로 direction을 구하기 위해 Rotator를 Quat로 형변환하여 Normal 값을 구하였다.

 

또한 Forward 벡터는 Normalize가 안되기 때문에 Normal 함수를 사용한다. 

UnsafeNormal은 0으로 나눌때의 에러를 고려하지 않는 함수이고, SafeNormal은 0으로 나눌때의 에러를 고려해 0 값이면 ZeroVector로 반환해준다.

 

OnMoveRight 함수도 Forward 함수와 동일하게 진행되고 Quat 변수의 RightVector로만 변경해주면 된다.

🚩 Mouse 회전 - OnHorizontalLook, OnVerticalLook

마우스의 회전은 AddController Yaw / Pitch Input 함수를 이용하였다.

🚩Walk, Run

캐릭터의 Walk와 Run을 제어하기 위해선 Bind Action 함수를 사용하였다. 이는 프로젝트 셋팅의 입력매핑 값들이다.

 

Bind Action 함수의 매개변수로 EInputEvent 열거형을 전달하는데 달리기 구현에서는 IE_Pressed로 눌렸을 때와, IE_Released 뗐을 때를 사용하였다.

나머지 Axis는 축 입력일 때, Double Click은 더블클릭 했을 때, Repeat 누르고 있을 때를 의미한다.

 

 

On Run, Off Run 함수에서는 CharacterMovement의 MaxWalkSpeed 값을 각각 조절하여 캐릭터가 걷거나 뛰기의 Animation Blend Space 애니메이션이 적절하게 출력되도록 하였다.

 

결과적으로 플레이어의 회전과 이동이 잘 구현되었다.

 

 

728x90