액터클래스가 아닌 폰으로 이동을 구현해보려는데, 유니티로 따지면 CharacterContoller를 안쓰고 구현하는 정도라고 생각하면 될 것 같다.
사실 유니티 개발할 때도 CharacterController를 즐겨 사용하는 편은 아니었다.
이동은 WASD, 회전은 마우스 축으로 주려고 했다.
void AFirstPawn::Move(const FInputActionValue& value)
{
FVector MoveDir = value.Get<FVector>();
if (MoveDir.IsNearlyZero())
{
return;
}
MoveDir = MoveDir.GetSafeNormal();
UE_LOG(LogTemp, Warning, TEXT("%s"), *MoveDir.ToString());
const float DeltaTime = GetWorld()->GetDeltaSeconds();
AddActorLocalOffset(600.0f * DeltaTime * FVector(MoveDir.X, MoveDir.Y, 0));
}
Tick에서 인풋을 받아 쓰는 것이 아니라 따로 인풋을 받아 쓰기 때문에 DeltaTime을 따로 받아와야 한다.
void AFirstPawn::Look(const FInputActionValue& value)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *value.ToString());
FVector2D LookDirection = value.Get<FVector2D>();
if (LookDirection.IsNearlyZero())
{
return;
}
SpringArm->SetRelativeRotation(FRotator(LookDirection.Y + SpringArm->GetDesiredRotation().Pitch,0, 0));
SetActorRotation(FRotator(0, LookDirection.X + GetActorRotation().Yaw, 0));
}
중요한 건 회전인데, AddControllerYawInput 같은 걸 안쓰고 그냥 회전을 주려고 했다.