Unreal
[Unreal C++] 캐릭터 이동과 카메라 회전 구현하기
푸쿠이
2021. 5. 27. 23:39
사용자 입력 값 받기
축 매핑하기
마우스를 위로 올렸을 때, 카메라가 위로 가면 아래를 비추게 된다.
보통 게임은 위를 보기 위해 마우스를 위로 올린다.
이러한 이유로 값을 반전해주기 위해 LookUp을 -1로 지정했다.
입력 이벤트에 함수 바인딩하기
Character 클래스에서 SetupPlayerInputComponent() 를 오버라이딩해서 구현했다.
public:
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
public:
UFUNCTION()
void LookUp(float AxisValue);
UFUNCTION()
void Turn(float AxisValue);
UFUNCTION()
void MoveForward(float AxisValue);
UFUNCTION()
void MoveRight(float AxisValue);
void APlayer_Base::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("LookUp", this, &APlayer_Base::LookUp);
PlayerInputComponent->BindAxis("Turn", this, &APlayer_Base::Turn);
PlayerInputComponent->BindAxis("MoveForward", this, &APlayer_Base::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &APlayer_Base::MoveRight);
}
UFUNCTION 매크로를 쓰지 않아도 잘 동작하지만, 궁금해서 찾아봤다.
언리얼 문서에 이렇게 설명되어있으니, 써주는게 좋은 것 같다.
이동 구현하기
캐릭터의 회전 값을 기준으로 앞쪽 방향, 오른쪽 방향을 구했다.
#include "Kismet/KismetMathLibrary.h"
void APlayer_Base::MoveForward(float AxisValue)
{
FVector Direction = UKismetMathLibrary::GetForwardVector(FRotator(0.0f, GetControlRotation().Yaw, 0.0f));
AddMovementInput(Direction, AxisValue);
}
void APlayer_Base::MoveRight(float AxisValue)
{
FVector Direction = UKismetMathLibrary::GetRightVector(FRotator(0.0f, GetControlRotation().Yaw, 0.0f));
AddMovementInput(Direction, AxisValue);
}
카메라 회전 구현하기
void APlayer_Base::LookUp(float AxisValue)
{
AddControllerPitchInput(AxisValue);
}
void APlayer_Base::Turn(float AxisValue)
{
AddControllerYawInput(AxisValue);
}
이렇게 하면, 카메라가 제대로 동작하지 않는다.
SpringArm 컴포넌트의 bUsePawnControlRotation 값이 False가 기본 값이기 때문이다.
True로 바꿔주자.
// 캐릭터 클래스의 생성자에 추가한 코드.
SpringArm->bUsePawnControlRotation = true;
구현 결과
이동과 카메라는 게임마다 설정이 달라서, 자기 게임에 맞게 값을 세팅해주면 될 것 같다.