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 위치 같은 값을 설정하기 어렵다.
블루프린트에서 상속받아서 시각적으로 이리저리 이동시켜보고 난 후, 값을 기억해서 코드에 작성하면 편하다.