#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Item.generated.h"
CoreMinimal.h
언리얼 엔진에서 자주 사용하는 기본 타입(FString, TArray 등)과 매크로(UE_LOG 등), 각종 유틸 함수들이 정의되어 있음
Item.generated.h
언리얼 엔진의 리플렉션 시스템에서 필요한 코드를 자동 생성하기 위한 매크로 (나중에 정리)
UCLASS()
class GAME1_API AItem : public AActor
{
GENERATED_BODY()
public:
AItem();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
};
UCLASS()
- 생성한 클래스를 언리얼 엔진의 리플렉션 시스템에서 인식하도록 하는 매크로
- 언리얼 에디터에서 이 클래스를 블루프린트로 확장할 수 있게 하고, 에디터의 여러 기능과 연동하도록 함
AItem
- 언리얼 엔진 C++에서는 클래스 이름에 접두사를 붙이는 컨벤션이 있음
💡 언리얼 엔진 코드 컨벤션
A - Actor 계열 / U - Object 계열 / F - 일반 구조체 / E - 열거형 등
언리얼 엔진 코드 컨벤션 문서
GENERATED_BODY()
- UCLASS()와 짝을 이루어, 엔진 리플렉션에 필요한 코드를 자동 생성해주는 매크로
BeginPlay()
- 액터가 월드에 완전히 배치된 뒤, 게임이 플레이 상태로 시작할 때 한번 호출됨
Tick(float DeltaTime)
- 매 프레임마다 자동으로 호출됨
- 주로 매 프레임 단위의 업데이트가 필요한 로직을 이곳에 넣음
#include "Item.h"
AItem::AItem()
{
PrimaryActorTick.bCanEverTick = true;
}
void AItem::BeginPlay()
{
Super::BeginPlay();
}
void AItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
UCLASS()
class GAME1_API AItem : public AActor
{
GENERATED_BODY()
public:
AItem();
protected:
USceneComponent* SceneRoot;
UStaticMeshComponent* StaticMeshComp;
};
AItem::AItem()
{
// 씬 컴포넌트 생성
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot); // 씬 컴포넌트를 루트 컴포넌트로 설정
// 스태틱메시 컴포넌트 생성
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot); // 스태틱메시 컴포넌트를 하위 컴포넌트로 설정
}
CreateDefaultSubobject<T>(TEXT(""))
- 언리얼 엔진에서 컴포넌트를 생성하고 초기화할 때 사용하는 함수
- 템플릿 타입 <T>로 생성할 컴포넌트의 유형을 지정
- ""안에 컴포넌트의 식별 이름을 지정
💡 TEXT() 매크로
문자열을 유니코드로 처리하기 위한 것으로, 언리얼 엔진 코드 표준에서 권장함
SetRootComponent()
- 매개변수로 들어온 컴포넌트를 루트 컴포넌트로 설정
SetupAttachment()
- 매개변수로 들어온 컴포넌트에 함수를 호출한 컴포넌트를 부착함
- 위에 예제에서는 StaticMeshComp가 SceneRoot에 부착되어, StaticMeshComp가 하위 컴포넌트가 됨

AItem::AItem()
{
// 씬 컴포넌트 생성
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot); // 씬 컴포넌트를 루트 컴포넌트로 설정
// 스태틱메시 컴포넌트 생성
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot); // 스태틱메시 컴포넌트를 하위 컴포넌트로 설정
// 해당 경로의 메시 파일을 로드함
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/GAME/Resources/Props/SM_Chair.SM_Chair"));
// 성공적으로 로드했다면
if (MeshAsset.Succeeded())
{
// 스태틱 메시 컴포넌트에 적용
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
// 해당 경로의 머티리얼 파일을 로드함
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 부분부터 입력하면 됨 (/Game은 언리얼 엔진에서 프로젝트의 Content를 나타냄
Succeeded()
- 지정된 경로에서 리소스를 성공적으로 찾았는지 확인
- 경로가 잘못되었거나 리소스 파일이 누락된 경우 실패하며, 이후 설정 함수가 호출되지 않음
SetStaticMesh(), SetMaterial()
- Static Mesh를 StaticMeshComp에 설정
- Materail을 StaticMeshComp의 특정 머티리얼 슬롯에 적용함