Rider에서 클래스 생성 방법


<aside> <img src="/icons/battery-charging_green.svg" alt="/icons/battery-charging_green.svg" width="40px" />

클래스 타입

구분 파일 위치 특징
Public .h: Public 폴더,.cpp: Private 폴더 프로젝트의 다른 모듈에서 쉽게#include할 수 있어 편리
Private .h,.cpp모두 Private 폴더 해당 모듈에서만 접근 가능, 특정 로직이나 구현을 캡슐화

<aside> <img src="/icons/battery-charging_green.svg" alt="/icons/battery-charging_green.svg" width="40px" />

Rider에서 클래스 생성을 할 경우, 다음과 같은 이점을 얻을 수 있다.

image.png

</aside>


UObject와 AActor


UObject

UObject는 게임 내의 모든 객체들의 기반이 되는 클래스로서, 언리얼 엔진의 핵심적인 기능들을 상속받아 사용할 수 있게 해준다. 그러나, UObject 자체는 데이터 컨테이너 역할만 하며, 씬에 직접 배치할 수 없다.

UObject에서는 다음과 같은 기능을 제공하고 있다.

기능 설명
가비지 컬렉션 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제
레퍼런스 업데이트 객체 참조가 변경될 때 자동으로 관련 참조들을 업데이트
리플렉션 런타임에 객체의 속성과 메서드에 접근하고 조작할 수 있는 기능
직렬화 객체를 저장하거나 네트워크로 전송할 수 있는 형태로 변환
디폴트 프로퍼티 자동 업데이트 기본 속성값이 변경될 때 자동으로 인스턴스들에 반영
자동 프로퍼티 초기화 객체 생성 시 속성들을 자동으로 기본값으로 초기화
자동 에디터 통합 언리얼 에디터에서 자동으로 편집 가능한 인터페이스 제공
런타임 타입 정보 게임 실행 중에도 객체의 타입 정보를 확인하고 활용 가능
네트워크 리플리케이션 멀티플레이어 게임에서 객체 상태를 자동으로 동기화

AActor

AActor는 UObject를 상속받은 클래스로, 게임 월드에 실제로 배치될 수 있는 모든 객체의 기본이 되는 클래스이다.

게임 내에서 물리적으로 존재하는 모든 것들은 AActor를 상속받아 구현된다. AActor는 Transform(위치, 회전, 크기) 정보를 가지고 있으며, 컴포넌트를 통해 다양한 기능을 조합할 수 있다.

AActor에서는 다음과 같은 기능을 제공하고 있다.

기능 설명
컴포넌트 액터는 컴포넌트를 담는 컨테이너 역할을 하며, 이를 통해 이동과 렌더링을 제어
티킹 프레임마다 또는 사용자 정의 간격으로 업데이트되며, Tick() 함수를 통해 구현
리플리케이션 멀티플레이어 게임에서 액터의 상태와 함수 호출을 네트워크로 동기화
소멸 관리 Destroy() 함수로 명시적 소멸이 가능하며, 가비지 컬렉션으로 정리

UObject vs AActor

특성 UObject AActor
게임 월드 배치 불가능 가능
Transform 정보 없음 위치, 회전, 크기 정보 보유
컴포넌트 컴포넌트를 가질 수 없음 다양한 컴포넌트 소유 가능
Tick 함수 없음 매 프레임 자동 호출
주요 용도 데이터 컨테이너 게임 월드의 실제 객체

AActor 클래스 구조 이해


#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Item.generated.h"

#pragma once

헤더 파일이 여러 번 포함되더라도, 컴파일 시 단 한 번만 처리하도록 해주는 지시어이다.

<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />

과거에는 #ifndef ~ #define ~ #endif 방식을 사용했지만, 대부분의 최신 C++ 프로젝트에서 #pragma once를 권장한다.

</aside>

#include "CoreMinimal.h"

언리얼 엔진에서 자주 사용하는 기본 타입(FString, TArray 등)과 매크로(UE_LOG 등), 각종 유틸 함수들이 정의되어 있다.

#include "GameFramework/Actor.h"

AActor를 상속받기 위해 필요한 헤더 파일이다.

#include "Item.generated.h"

언리얼 엔진의 리플렉션 시스템에서 필요한 코드를 자동 생성하기 위한 매크로이다.

UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
	GENERATED_BODY()

public:
	// Sets default values for this actor's properties
	AItem();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;
};

UCLASS()

클래스를 언리얼 엔진의 리플렉션 시스템에서 인식하도록 하는 매크로이다.

class SPARTAPROJECT_API AItem : public AActor

AItem

SPARTAPROJECT_API

GENERATED_BODY()

라이프 사이클 함수

BeginPlay()