void ASpartaCharacter::Move(const FInputActionValue& value)
{
if (!Controller) return;
const FVector2D MoveInput = value.Get<FVector2D>();
if (!FMath::IsNearlyZero(MoveInput.X))
{
AddMovementInput(GetActorForwardVector(), MoveInput.X);
}
if (!FMath::IsNearlyZero(MoveInput.Y))
{
AddMovementInput(GetActorRightVector(), MoveInput.Y);
}
}
if (!Controller) return;
const FVector2D MoveInput = value.Get<FVector2D>();
FInputActionValue에서 입력 데이터를 2D 벡터(FVector2D) 형식으로 가져온다.(X=1, Y=0) : 전진(X=-1, Y=0) : 후진(X=0, Y=1) : 오른쪽 (X=0, Y=-1) : 왼쪽if (!FMath::IsNearlyZero(MoveInput.X))
{
AddMovementInput(GetActorForwardVector(), MoveInput.X);
}
if (!FMath::IsNearlyZero(MoveInput.Y))
{
AddMovementInput(GetActorRightVector(), MoveInput.Y);
}
FMath::IsNearlyZero(MoveInput.X)AddMovementInput(GetActorForwardVector(), MoveInput.X)AddMovementInput:FVector)CharacterMovementComponent가 요청을 받아서 속도를 계산하고, 실제 이동을 구현한다.GetActorForwardVector():FVector 타입)void ASpartaCharacter::StartJump(const FInputActionValue& value)
{
if (value.Get<bool>())
{
Jump();
}
}
void ASpartaCharacter::StopJump(const FInputActionValue& value)
{
if (!value.Get<bool>())
{
StopJumping();
}
}
if (value.Get<bool>())
value.Get<bool>()true : 키 눌림false: 키 눌리지 않음Character 클래스에서 제공하는 기본 점프 함수)void ASpartaCharacter::Look(const FInputActionValue& value)
{
FVector2D LookInput = value.Get<FVector2D>();
AddControllerYawInput(LookInput.X);
AddControllerPitchInput(LookInput.Y);
}
FVector2D LookInput = value.Get<FVector2D>();
value.Get<FVector2D>() AddControllerYawInput(LookInput.X);
AddControllerYawInput:AddControllerPitchInput(LookInput.Y);
AddControllerPitchInput:헤더파일 변수 선언
// 이동 속도 관련 프로퍼티들
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
float NormalSpeed; // 기본 속도
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
float SprintSpeedMultiplier; // "기본 속도" 대비 몇 배로 빠르게 달릴지 결정
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Movement")
float SprintSpeed; // 스프린트 속도
생성자에서 초기화
NormalSpeed = 600.0f;
SprintSpeedMultiplier = 1.7f;
SprintSpeed = NormalSpeed * SprintSpeedMultiplier;
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
스프린트 함수 구현
void ASpartaCharacter::StartSprint(const FInputActionValue& value)
{
if (GetCharacterMovement())
{
GetCharacterMovement()->MaxWalkSpeed = SprintSpeed;
}
}
void ASpartaCharacter::StopSprint(const FInputActionValue& value)
{
if (GetCharacterMovement())
{
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
}
}
if (GetCharacterMovement())
GetCharacterMovement()의 반환값이 nullptr인지 확인한다.GetCharacterMovement():ACharacter 클래스에 기본 내장된 함수로, 캐릭터의 이동을 처리하는 UCharacterMovementComponent* 포인터를 반환한다.GetCharacterMovement()->MaxWalkSpeed = SprintSpeed;
SprintSpeed로 설정한다.