MyPawn은 부모 클래스를 Pawn으로 만들었다. Actor와 다른점은 코드를 보면 아래 함수가 추가되어져 있다
// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
여기에 Edit>프로젝트세팅>Inputs Tab의 InputAxis를 연결해줘야 한다. 우선 InputAxis를 만들자.
MyPawn.h에 방금만든 Axis를 이벤트를 선언한다.
public:
void UpDown(float Value);
void LeftRight(float Value);
private:
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* Mesh;
UPROPERTY(VisibleAnywhere)
class UFloatingPawnMovement *Movement;
MyPawn.cpp에 AddMovementInput() 사용을 위해 프레임워크를 사용하기 위해 다음과 같이 선언하고
#include "MyPawn.h"
#include "GameFramework/FloatingPawnMovement.h"
생성자에 UFloatingPawnMovemnt 인스턴스를 만들어 연결해준다.
AMyPawn::AMyPawn()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
//GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello world"));
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));
Movement = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MOVEMENT"));
ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("/Game/StarterContent/Props/SM_Couch.SM_Couch"));
if (SM.Succeeded()) {
Mesh->SetStaticMesh(SM.Object);
}
}
Updown, Leftright를 정의한다.
void AMyPawn::UpDown(float Value)
{
if (Value == 0.f)
return;
UE_LOG(LogTemp, Error, TEXT("UpDown %f"), Value);
AddMovementInput(GetActorForwardVector(), Value);
}
void AMyPawn::LeftRight(float Value)
{
if (Value == 0.f)
return;
UE_LOG(LogTemp, Error, TEXT("UpLeftRight %f"), Value);
AddMovementInput(GetActorRightVector(), Value);
}
Pawn을 움직이는데 SetActorLocation()을 사용하지 않고 Framework에서 구현되어 있는 AddMovementInput()를 사용하는 이유는 좀더 향상된 움직임을 제공하기 때문이다.
저장하고 라이브코딩후 플레이 해보면 WASD키를 사용하여 쇼파가 움직인다.
'언리얼엔진 > c++클래스 만들어보기' 카테고리의 다른 글
EnhancedInput 연습 (1) | 2023.10.17 |
---|---|
UE5 C++클래스 Character상속 (1) | 2023.10.17 |
UE5 GameModeBase (0) | 2023.10.15 |
UE5 빌드 환경 설정 및 컴파일 방법 (0) | 2023.10.14 |
언리얼 C++ StaticMesh 추가하기 (0) | 2023.10.14 |