REFLECTION

C++ 코드가 에디터 언어가 되는 흐름

언리얼은 표준 C++만으로 부족한 메타데이터를 매크로와 UHT로 생성한다. 이 정보가 에디터, 블루프린트, 직렬화, GC 연결의 기반이 된다.

표시 클래스와 멤버를 등록
생성 UHT가 메타코드 작성
연동 에디터와 Blueprint 노출
UCLASS 언리얼 타입으로 등록
UPROPERTY 속성·저장·GC 추적
UFUNCTION 호출·Blueprint 노출

리플렉션 파이프라인

헤더의 매크로 선언이 빌드 도구를 거쳐 런타임과 에디터가 읽는 정보가 된다.

Header

매크로로 표시

언리얼이 알아야 할 클래스, 변수, 함수를 명시한다.

UCLASS()
class AMyActor : public AActor
UHT

헤더 분석

Unreal Header Tool이 선언을 읽고 메타데이터를 만든다.

MyActor.generated.h
Build

생성 코드 포함

GENERATED_BODY()가 엔진 내부 연결 코드를 확장한다.

Reflection metadata
Editor

도구에서 활용

에디터, 블루프린트, 직렬화, GC가 같은 메타정보를 읽는다.

Details / Blueprint

매크로별 책임

무엇을 노출하려는지에 따라 붙이는 위치와 의미가 달라진다.

UCLASS

클래스를 엔진 타입으로

상속 구조, 생성 가능 여부, 블루프린트 파생 가능성 같은 타입 정보를 등록한다.

UCLASS(Blueprintable)
UPROPERTY

멤버 변수를 관리 대상으로

디테일 패널 편집, 저장/로드, GC 참조 추적, 블루프린트 접근을 제어한다.

UPROPERTY(EditAnywhere)
float Health;
UFUNCTION

함수를 호출 가능한 노드로

블루프린트 호출, 순수 함수, 네트워크 RPC 같은 함수 메타데이터를 부여한다.

UFUNCTION(BlueprintCallable)
void TakeDamage();

메타데이터가 쓰이는 곳

리플렉션은 문법 장식이 아니라 엔진 도구가 C++을 이해하는 계약이다.

Details

속성 편집

카테고리, 읽기 전용, 기본값 편집 가능 범위가 패널에 반영된다.

Blueprint

노드 노출

C++ 함수와 변수가 블루프린트 그래프에서 호출 가능한 형태가 된다.

Serialize

저장과 로드

레벨, 에셋, 기본값이 어떤 속성을 저장할지 판단할 수 있다.

GC

참조 추적

UObject 참조가 수집 대상인지, 살아 있어야 하는지 추적한다.

입문 단계 체크포인트

리플렉션 오류는 대부분 헤더 구조와 매크로 위치에서 시작된다.

generated.h는 마지막 include

UHT가 생성한 선언이 기존 타입 선언 뒤에 이어져야 한다.

GENERATED_BODY는 클래스 초반

엔진이 주입하는 기본 코드가 클래스 정의 안에 들어가는 지점이다.

노출 목적을 먼저 고른다

에디터 편집, Blueprint 호출, 저장, 네트워크 중 필요한 기능만 붙인다.