1. 헤더 파일(.h)
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Item.generated.h"
UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
GENERATED_BODY()
public:
AItem();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
};
1. #pragma once
- 이 헤더 파일이 중복 포함되는 것을 방지한다.
- 과거에는
#ifndef ~ #define ~ #endif 구문을 사용했지만, #pragma once는 더 간단하고 효과적인 방식으로 최신 C++ 프로젝트에서 권장된다.
2. #include "CoreMinimal.h"
- 언리얼 엔진에서 자주 사용하는 기본 타입(FString, TArray), 매크로(UE_LOG), 유틸 함수 등을 제공한다.
- 모든 언리얼 C++ 클래스에서 반드시 포함해야하는 헤더파일이다.
3. #include "GameFramework/Actor.h"
AActor를 상속받기 위해 필요한 헤더 파일이다.
- Unreal의
Actor 클래스는 게임 내에서 배치 가능한 객체를 나타낸다.
4. #include "Item.generated.h"
- 언리얼 엔진의 리플렉션 시스템에서 필요한 코드를 자동으로 생성하기 위한 매크로다.
- 이 코드는 Unreal Build Tool(UBT)에 의해 컴파일 중에 자동 생성되므로 삭제하거나 순서를 바꾸면 에러가 발생한다.
5. UCLASS()
- 이 클래스가 언리얼 엔진의 리플렉션 시스템에 의해 처리되도록 하는 매크로다.
- 리플렉션을 통해 클래스가 언리얼 에디터에서 블루프린트로 확장되거나, 에디터 내의 여러 시스템과 통합될 수 있다.
6. class SPARTAPROJECT_API AItem : public AActor
- 이 구문은
AActor를 상속받아 AItem 클래스를 정의하는 부분이다.
SPARTAPROJECT_API: 현재 모듈(프로젝트) 외부에서 이 클래스를 사용할 수 있도록 Export(내보내기)하는 매크로다.
- 클래스 명명 규칙:
- Unreal Engine에서는 클래스 이름 앞에 접두사를 붙이는 컨벤션을 따른다.
A (Actor), U (Object), F (구조체), T (템플릿), E (열거형) 등.
- 예를 들어,
AItem은 Actor 계열 클래스를 의미한다.
7. GENERATED_BODY()
- 클래스 내부에서 Unreal Engine이 리플렉션 시스템과 관련된 코드를 자동으로 생성하도록 하는 매크로다.
- 이 매크로가 없으면 Unreal 에디터와 통합되지 않으며, 에러가 발생한다.
2. 구현 파일(.cpp)
#include "Item.h"
AItem::AItem()
{
PrimaryActorTick.bCanEverTick = true;
}
void AItem::BeginPlay()
{
Super::BeginPlay();
}
void AItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
1. #include "Item.h"
- 자신의 헤더 파일을 가장 먼저 포함해야 한다.
- 언리얼의 리플렉션 매크로(
GENERATED_BODY)가 올바르게 처리되기 위해 순서가 중요하다.