UnrealEngine

Unreal Engine5 캐릭터 이동1

Cheddar 2024. 1. 9. 12:51

입력을 받아 캐릭터를 이동시켜보자.

주) 아래 내용은 Enhanced Input을 기반을 만든내용이 아님.

Enhanced Input에 대해 내용은 따로 정리하겠다.

 

1. 입력 매핑

// Called to bind functionality to input
void AShooterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

}

 SetupPlayerInputComponent(UIInputComponent* PlayerInputComponent) 함수 내부에서 바인딩 시킬 수 있다.

입력을 바인딩하기 위해 프로젝트 세팅에서 Action과 Axis 매핑해줘야한다.

프로젝트 세팅의 입력항목

기본적으로 캐릭터의 좌우상하 이동과 카메라의 시점이동은 Axis매핑을 해준다.

점프와 같은 입력을 받고 한번만 실행되는 액션에 대해서는 Action매핑을 해준다.

마우스Y의 입력의 경우 스케일을 -1.0으로 해줘야한다.

 

2. 이동과 관련된 함수를 작성한다.

매핑한 입력과 바인딩하기 위한 함수를 작성해야한다.

함수의 작성은 Character Actor클라스가 제공하는 함수를 이용한다.

 

    a. Character Actor클라스에 의해 제공되는 이동함수가 있다.

  • AddMovementInput() : 벡터를 입력받아 이동할 방향을 알려준다.
  • AddContorllerPitchInput() : 위 아래를 바라보는 기능을 한다.
  • AddControllerYawInput() : 왼쪽 오른쪽을 바라보는 기능을 한다.
  • Jump() : 점프 기능을 한다.

이를 이용한 함수 작성

//前後の移動
void AShooterCharacter::MoveForward(float AxisValue)
{
	AddMovementInput(GetActorForwardVector() * AxisValue);
}

//左右の移動
void AShooterCharacter::MoveRight(float AxisValue)
{
	AddMovementInput(GetActorRightVector() * AxisValue);
}

//マウス上下移動
void AShooterCharacter::LookUp(float AxisValue)
{
	AddControllerPitchInput(AxisValue);
}

//マウス左右移動
void AShooterCharacter::LookRight(float AxisValue)
{
	AddControllerYawInput(AxisValue);
}

   

3. 작성한 함수를 바인딩한다.

 SetupPlayerInputComponent(UIInputComponent* PlayerInputComponent) 에서 PlayerInputComponent에 접근하여 작성한 함수를 바인딩 한다.

// Called to bind functionality to input
void AShooterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAxis(TEXT("MoveForward"), this, &AShooterCharacter::MoveForward);
	PlayerInputComponent->BindAxis(TEXT("MoveRight"), this, &AShooterCharacter::MoveRight);
	PlayerInputComponent->BindAxis(TEXT("LookUp"), this, &AShooterCharacter::LookUp);
	PlayerInputComponent->BindAxis(TEXT("LookRight"), this, &APawn::AddControllerYawInput);
	PlayerInputComponent->BindAction(TEXT("Jump"), IE_Pressed, this, &ACharacter::Jump);
}

추가) 사실 LookUp함수와 LookRight함수에 대해서는 따로 작성할 필요는 없다.

그 이유에 대해서는 마지막 두 줄을 보면 되는데,

	PlayerInputComponent->BindAxis(TEXT("LookRight"), this, &APawn::AddControllerYawInput);
	PlayerInputComponent->BindAction(TEXT("Jump"), IE_Pressed, this, &ACharacter::Jump);

바인딩 해준 다른 함수들과 다르게 APawn의 멤버함수와 Acharacter의 멤버함수를 사용하고 있다.

사실 작성한  LookUp함수와 LookRight함수의 처리를 보면 입력으로 받은 것을 그대로 AddController...()함수에 전달하고 있기때문에 따로 함수로 작성하여 전달할 필요없이,

부모(APawn)의 함수를 바로 사용하면 된다.

Jump함수도 마찬가지로 따로 함수를 작성할 필요없이 부모(ACharacter)의 함수를 바로 사용하면 된다.

클라스 계층: MyCharacter <- ACharacter<- APawn