Actor 클래스의 코드 구조

김민수·2025년 1월 21일

언리얼 C++

목록 보기
7/32

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 (열거형) 등.
      • 예를 들어, AItemActor 계열 클래스를 의미한다.

7. GENERATED_BODY()

  • 클래스 내부에서 Unreal Engine이 리플렉션 시스템과 관련된 코드를 자동으로 생성하도록 하는 매크로다.
  • 이 매크로가 없으면 Unreal 에디터와 통합되지 않으며, 에러가 발생한다.

2. 구현 파일(.cpp)

#include "Item.h" // 헤더 파일 포함

// 생성자 구현부
AItem::AItem()
{
    // Tick 함수를 활성화 (이후 Tick() 함수가 호출됨)
    PrimaryActorTick.bCanEverTick = true;
}

// BeginPlay() 구현부
void AItem::BeginPlay()
{
    Super::BeginPlay(); // 부모 클래스의 BeginPlay() 호출
}

// Tick() 구현부
void AItem::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime); // 부모 클래스의 Tick() 호출
}

1. #include "Item.h"

  • 자신의 헤더 파일을 가장 먼저 포함해야 한다.
  • 언리얼의 리플렉션 매크로(GENERATED_BODY)가 올바르게 처리되기 위해 순서가 중요하다.
profile
안녕하세요

0개의 댓글