언리얼 클래스 기본 개념
언리얼 클래스 생성 및 삭제, 컴포넌트 추가, 라이프 사이클
언리얼 클래스 제어
1. 클래스 생성
Tool - New C++ Class - [부모 클래스 선택]
public, private 설정하면 공개 여부를 설정할 수 있음
2. 전처리기 세팅
#include "CoreMinimal.h"
- 엔진 전역 타입, 매크로, 함수
- 맨 위에 포함
#include "GameFramework/Actor.h"
- AActor 클래스 선언
#include "Item.generated.h"
- 언리얼 헤더툴이 자동 생성하는 코드를 포함하는 것
- 항상 마지막 줄에 위치해야함
3. .h 선언부 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
GENERATED_BODY()
public:
// 생성자
AItem();
protected:
// 액터가 월드에 스폰 (배치된) 직후 한 번만 호출
virtual void BeginPlay() override;
// 매 프레임마다 호출
virtual void Tick(float DeltaTime) override;
};
UCLASS
- 리플렉션 시스템에 등록
class SPARTAPROJECT_API AItem : public AActor
Actor를 상속
- 접두사 규칙 존재
A: ActorU: ObjectF: 구조체T: 템플릿E: 열거형I: 인터페이스
ProjectName_API- 클래스 모듈화
- 외부에서 사용 가능케 하는 매크로
GENERATED_BODY()
UCLASS()와 짝을 이루어, 언리얼 헤더툴 (UHT)이 자동 생성한 코드를 삽입해 주는 매크로
4. 컴포넌트 추가
Component : Actor의 역할, 속성 등을 갖도록 만들어주는 부픔 개념
Root Component
- 모든 Actor는 Root 컴포넌트를 갖아야함
- Actor는 역할이 있는 대상이기 때문에 트랜스폼을 관리할 수 있는 Scene Component를 보통 루트로 설정함
Static Mesh Component: 애니메이션이나 스켈레탈 본 없는 정적 3D 모델을 그리는 컴포넌트
선언
1
2
USceneComponent* Root; // 씬 컴포넌트 선언
UStaticMeshComponent* StaticMeshComp; // 스태틱 메쉬 컴포넌트 선언
생성
1
CreateDefaultSubobject<T>(TEXT("")); // 컴포넌트 생성 및 초기화
설정
1
2
SetRootComponent(Root); // 루트 컴포넌트를 생성한 씬 컴포넌트로 설정
StaticMeshComp->SetupAttachment(Root); // 스태틱 메쉬 컴포넌트를 Root에 부착
이렇게 하면 구조적으로는 붙어있으나 Editor에서는 확인이 불가 리플렉션을 설정하지 않았기 때문
5. 메쉬, 머테리얼 경로로 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AMyActor::AMyActor()
{
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"));
if (MeshAsset.Succeeded())
{
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
// Material을 코드에서 설정
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Metal_Gold.M_Metal_Gold"));
if (MaterialAsset.Succeeded())
{
StaticMeshComp->SetMaterial(0, MaterialAsset.Object);
}
}
ConstructorHelpers::FObjectFinder<T>
- 리소스를 경로 기반으로 로드
- 경로 작성은 /Game/~~~/ResourceType/ResourceCategory.ResourceName
6. 삭제
cpp 파일이 생성된 파일 경로에서 파일 삭제를 하면 클래스 삭제가 가능 경로
C:\Users\shs\Documents\Unreal Projects\CH3_Personal_1\Source\CH3_Personal_1\Private
C:\Users\shs\Documents\Unreal Projects\CH3_Personal_1\Source\CH3_Personal_1\Public
파일명
- MyActor.h, MyActor.cpp
7. 클래스 라이프 사이클
생성자 : 메모리에 생기는 시점. 월드가 생성되기 전에 생성될 수 있음. PostInitializeComponent : 컴포넌트가 완성된 직후 호출. 컴포넌트끼리 데이터 주고받기, 상호작용 BeginPlay : Spawn 직후 Tick : 매 프레임마다 호출 Destroyed : 삭제 되기 직전에 호출 EndPlay : Destroy 뒤에 호출. 게임 종료, Destroy, 레벨 전환 등에서 사용