내일배움캠프-언리얼

[내일배움캠프 - 언리얼] DAY 31 - Actor와 Component

이시보 2026. 1. 12. 21:30

Actor 클래스 코드 구조

#pragma once

동일 헤더가 프로젝트 곳곳에서 여러 번 포함되더라도 컴파일러가 한 번만 처리하도록 한다.

#include "CoreMinimal.h"

엔진 전역 타입, 매크로, 함수 등을 가져온다.

#include "GameFramework/Actor.h"

AActor 클래스 선언을 사용 가능하게 한다.

#include "Item.generated.h"

언리얼 헤더툴이 자동 생성하는 코드를 포함하는 것으로, 항상 헤더의 마지막 줄에 위치해야한다.

UCLASS()

이 클래스를 리플렉션 시스템에 등록하는 매크로

언리얼 에디터에서 이 클래스를 블루프린트로 확장할 수 있게 하고, 에디터의 여러 기능과 연동하도록 한다.

 

언리얼 엔진 C++에서는 클래스 이름에 접두사를 붙이는 접두사 규칙이 있다.

A(actor), U(object), F(구조체), T(템플릿), E(열거형) 등

 

컴포넌트란?

Actor가 어떤 역할을 하거나 특정 속성을 갖도록 만들어주는 부품 개념

한 액터에 여러 개의 컴포넌트를 장착해 복합적인 기능을 구현할 수 있다.

 

// 루트 컴포넌트를 나타내는 Scene Component 포인터
USceneComponent* SceneRoot;
// Static Mesh Component 포인터
UStaticMeshComponent* StaticMeshComp;
// Scene Component를 생성하고 루트로 설정
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot);

// Static Mesh Component를 생성하고 Scene Component에 Attach
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot);
		
// Static Mesh를 코드에서 설정
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);
}