이번엔 C++ 코드를 이용해서 Actor를 생성해보자.
BP
액터 자체가 물리적인 무언가를 가지는 것은 아니고 컴포넌트를 소유하면서 그에 맞는 일을 하게된다. 그중 액터를 대표하는 컴포넌트를 Root Component라고 한다. Root Component는 액터에 반드시 존재해야한다.

BP_Fountain에서 Root Component는 Skeletal Mesh Component인 Body 이다.
UPROPERTY(VisibleAnywhere,BlueprintReadWrite, Category = Mesh)
TObjectPtr<class UStaticMeshComponent> Body;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = Mesh)
TObjectPtr<class UStaticMeshComponent> Water;
블루프린트처럼 C++에서도 설정하려면 다음과 같이 Component들을 변수로 넣어주고
AABFountain::AABFountain()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// Component로 등록
Body = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Body"));
Water = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Water"));
// RootComponent 지정
RootComponent = Body;
Water->SetupAttachment(Body);
//위치 조정
Water->SetRelativeLocation(FVector(0.0f, 0.0f, 132.0f));
static ConstructorHelpers::FObjectFinder<UStaticMesh> BodyMeshRef(TEXT("/Script/Engine.StaticMesh'/Game/ArenaBattle/Environment/Props/SM_Plains_Castle_Fountain_01.SM_Plains_Castle_Fountain_01'"));
if (BodyMeshRef.Object)
{
Body->SetStaticMesh(BodyMeshRef.Object);
}
static ConstructorHelpers::FObjectFinder<UStaticMesh> WaterMeshRef(TEXT("/Script/Engine.StaticMesh'/Game/ArenaBattle/Environment/Props/SM_Plains_Fountain_02.SM_Plains_Fountain_02'"));
if (WaterMeshRef.Object)
{
Water->SetStaticMesh(WaterMeshRef.Object);
}
}
생성자에서 CreateDefaultSubobject로 Component 등록을 해준다.
여기서도 Root Component로 Body를 설정해주고 Skeletal Mesh 들을 레퍼런스를 통해 Skeletal Mesh Component로 넣어준다.
다음과 같이 동일한 모습을 한것을 볼 수 있다.