Actor클래스를 생성하여 컴포넌트를 추가하는 작업까지 진행할 예정이다.
우선 Bush라는 이름의 New C++클래스를 추가 했을 때 생성되는 기본 헤더파일이다.
#include "CoreMinimal.h" 는 언리얼 엔진에서 사용하는 기본 헤더 파일이다.
엔진의 핵심 기능과 필수적인 자료형, 클래스 등을 포함하고,
FVector, FRotator, UE_LOG 같은 유용한 클래스와 매크로를 사용할 수 있게 해준다.
#include "GameFramework/Actor.h" 는 Actor 클래스와 관련된 정의를 포함하는 헤더 파일이다.
Actor를 기반으로 객체를 생성하려면 이 헤더를 포함해야 하며,
상속 구조를 통해 사용자 정의 클래스를 생성할 때 필수입다.
#include "Bush.generated.h" 는 언리얼 리플렉션(Reflection) 시스템을 사용하기 위해 반드시 필요한 헤더파일이다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Bush.generated.h"
UCLASS()
// ~~_API : 외부로 Export하기 위한 매크로. DLL 등으로 빌드할 때 필요한 선언.
class CH3_WEEK1_1_API ABush : public AActor
{
// UCLASS()와 짝을 이루어, 엔진 리플렉션에 필요한 코드를 자동 생성해 주는 매크로이다.
GENERATED_BODY()
public:
ABush();
protected:
// 게임이 시작될 때 한 번 호출되는 함수.
virtual void BeginPlay() override;
public:
// 매 프레임마다 호출되는 함수.
virtual void Tick(float DeltaTime) override;
};
컴포넌트는 언리얼 엔진에서 Actor에게 부착해 다양한 속성을 갖도록 만들어주는 부품개념이다.
컴포넌트 종류에는 메쉬관련 컴포넌트, 물리충돌관련 컴포넌트, 오디오 등등 다양한 종류가 있다.
모든 Actor는 최상위 컴포넌트로 루트 컴포넌트를 가져아하는데,
루트 컴포넌트에는 액터의 트랜스폼이 정의되어 있고, 하위 컴포넌트들이 이를 기준으로 동작한다.
SceneComponent는 트랜스폼 속성을 가지는 기본 컴포넌트이며,
일반적으로 SceneComponent를 루트로 설정한다.
Static Mesh Component는 애니메이션 없이 움직임이 없거나
단순 이동, 회전만 하는 고정된 3D모델을 표시하는 컴포넌트이다.
// .h
UCLASS()
class CH3_WEEK1_1_API ABush : public AActor
{
GENERATED_BODY()
public:
ABush();
protected:
// SceneComponent 생성
USceneComponent* _SceneComp;
// StaticMeshComponent 생성
UStaticMeshComponent* _StaticMeshComp;
};
// .cpp
ABush::ABush()
{
// SceneComponent 초기화 및 루트컴포넌트로 설정.
_SceneComp = CreateDefaultSubobject<USceneComponent>(TEXT("SceneComp"));
SetRootComponent(_SceneComp);
// StaticMeshCompont 초기화 및 SceneComp에 붙이기.
_StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComp"));
_StaticMeshComp->SetupAttachment(_SceneComp);
}
이제 Mesh와 Material파일을 불러와 StaticMeshComponent에 설정해줘야 한다.
콘텐츠 브라우저에서 원하는 Mesh와 Material을 선택해 주소를 불러와준뒤에
SetMesh()와 SetMaterial로 설정해주면 된다.
ABush::ABush()
{
_SceneComp = CreateDefaultSubobject<USceneComponent>(TEXT("SceneComp"));
SetRootComponent(_SceneComp);
_StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComp"));
_StaticMeshComp->SetupAttachment(_SceneComp);
// 원하는 Mesh의 주소로 MeshAsset생성 및 초기화
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Bush.SM_Bush"));
// 원하는 Material의 주소로 MaterialAsset생성 및 초기화
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Ground_Grass.M_Ground_Grass"));
// Mesh와 Material설정Material은 여러개가 들어갈 수 있으므로 Index값 설정해줘야함.
if (MeshAsset.Succeeded())
{
_StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
if (MaterialAsset.Succeeded())
{
_StaticMeshComp->SetMaterial(0, MaterialAsset.Object);
}
}
TEXT("") 의 이름은 변수명이랑 똑같이 넣어줘야 한다.
'Unreal' 카테고리의 다른 글
Unreal) Actor 클래스 생성 및 삭제 (0) | 2025.01.24 |
---|---|
Unreal) 빌드 프로세스 (0) | 2025.01.24 |
Unreal) CH3 프로젝트 폴더 구조 이해하기 (0) | 2025.01.22 |
Unreal) 플레이어 캐릭터와 나만의 레벨 디자인 (0) | 2024.12.19 |
Unreal) 블루프린트를 이용한 비주얼 스크립팅 (1) | 2024.12.18 |