Pawn에서 Character로 넘어갈 때 생각보다 기능이 많이 추가된다.

Character는 기본적으로 SkeletalMesh가 붙어있다.

CharacterMoveComponent가 기본적으로 상속되어있다.

 

액터나 폰은 생성자에서 메시나 루트 컴포넌트를 직접 설정해줬어야 하는데 캐릭터는 부모 클래스가 기본값으로 다 설정을 해둔다.

 

 

// MyCharacter.h
	void UpDown(float Value); // 이전시간 Pawn에 있던 것과 같음
	void LeftRight(float Value); // cpp에서도 똑같이 복붙 해주면 된다. 클래스명만 바꿔서.

private:
	UPROPERTY(VisibleAnywhere)
	class USpringArmComponent* SpringArm; // CoreMinimal에 없으므로 전방선언

	UPROPERTY(VisibleAnywhere)
	class UCameraComponent* Camera; // 마찬가지로 전방선언
};


// MyCharacter.cpp
#include "MyCharacter.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"

// Sets default values
AMyCharacter::AMyCharacter()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	// 보이지 않는 일종의 셀카봉
	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SPRINGARM"));
    // 카메라
	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("CAMERA"));

	// 셀카봉을 캐릭터의 하위 구조에 넣음
	SpringArm->SetupAttachment(GetCapsuleComponent());
    // 카메라를 셀카봉의 하위 구조에 넣음
	Camera->SetupAttachment(SpringArm);

	// 셀카봉을 늘린다
	SpringArm->TargetArmLength = 500.f;
    // 캐릭터의 뒤쪽으로 뻗어나가게 회전 시킨다
	SpringArm->SetRelativeRotation(FRotator(-35.f, 0.f, 0.f));

	// 캐릭터 메시 위치를 조정한다 (위치 및 회전 동시 조정)
	GetMesh()->SetRelativeLocationAndRotation(
		FVector(0.f, 0.f, -88.f), FRotator(0.f, -90.f, 0.f));

	static ConstructorHelpers::FObjectFinder<USkeletalMesh> SM(TEXT("SkeletalMesh'/Game/ParagonGreystone/Characters/Heroes/Greystone/Meshes/Greystone.Greystone'"));
	
	if (SM.Succeeded())
	{
    	// StaticMesh가 아닌 SkeletalMesh를 가지고 있으므로 맞춰서 변경해줌
		GetMesh()->SetSkeletalMesh(SM.Object);
	}
}

 

 

상속 구조도 그대로 표현되는 것을 확인할 수 있다.

 

마우스 좌우 움직임으로 캐릭터 회전을 추가하는 경우, 기존 키 입력처럼 프로젝트 세팅에서 마우스 축을 추가하고,

SetupPlayerInputComponent에서 BindAxis를 해준 후 메소드를 구현해주면 된다.

+ Recent posts