Unreal

[Unreal C++] 캐릭터 기본 세팅 구현하기

푸쿠이 2021. 5. 27. 22:40
구현을 시작해봅시다!!

기본 맵 + 캐릭터 에셋으로 시작했습니다.

 

캐릭터 기본 세팅 구현하기

Character를 상속받는 클래스 생성하기

SpringArm, Camera 컴포넌트를 추가하고, Mesh를 변경해준다.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Player_Base.generated.h"

UCLASS()
class MYRPG_API APlayer_Base : public ACharacter
{
	GENERATED_BODY()

public:
	APlayer_Base();

public:
	UPROPERTY(VisibleAnywhere)
	class USpringArmComponent* SpringArm;

	UPROPERTY(VisibleAnywhere)
	class UCameraComponent* Camera;
};
#include "Player_Base.h"

#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"

APlayer_Base::APlayer_Base()
{
	PrimaryActorTick.bCanEverTick = false;

	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SPRINGARM"));
	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("CAMERA"));

	SpringArm->SetupAttachment(RootComponent);
	Camera->SetupAttachment(SpringArm);

	static ConstructorHelpers::FObjectFinder<USkeletalMesh> SK_Knight(TEXT("SkeletalMesh'/Game/ModularRPGHeroesPolyart/Meshes/OneMeshCharacters/KnightSK.KnightSK'"));
	if (SK_Knight.Succeeded())
	{
		GetMesh()->SetSkeletalMesh(SK_Knight.Object);
	}

	GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -90.f), FRotator(0.0f, 270.0f, 0.0f));

	SpringArm->TargetArmLength = 500.0f;
	SpringArm->SocketOffset = FVector(0.0f, 0.0f, 300.0f);
	Camera->SetRelativeRotation(FRotator(-20.0f, 0.0f, 0.0f));
}

 

GameMode를 상속받는 클래스 생성하기

게임을 시작하면 바로 캐릭터가 생성될 수 있도록, 기본 Pawn으로 설정한다.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "Main_GM.generated.h"

UCLASS()
class MYRPG_API AMain_GM : public AGameModeBase
{
	GENERATED_BODY()
	
public:
	AMain_GM();
};
#include "Main_GM.h"
#include "Player_Base.h"

AMain_GM::AMain_GM()
{
	DefaultPawnClass = APlayer_Base::StaticClass();
}

해당 Map의 게임 모드를 설정한다.

 

구현 결과

캐릭터가 T-Pose로 서있는 것을 볼 수 있다.

C++에서 Camera 위치 같은 값을 설정하기 어렵다.

블루프린트에서 상속받아서 시각적으로 이리저리 이동시켜보고 난 후, 값을 기억해서 코드에 작성하면 편하다.