매크로로 표시
언리얼이 알아야 할 클래스, 변수, 함수를 명시한다.
UCLASS() class AMyActor : public AActor
언리얼은 표준 C++만으로 부족한 메타데이터를 매크로와 UHT로 생성한다. 이 정보가 에디터, 블루프린트, 직렬화, GC 연결의 기반이 된다.
헤더의 매크로 선언이 빌드 도구를 거쳐 런타임과 에디터가 읽는 정보가 된다.
언리얼이 알아야 할 클래스, 변수, 함수를 명시한다.
UCLASS() class AMyActor : public AActor
Unreal Header Tool이 선언을 읽고 메타데이터를 만든다.
MyActor.generated.h
GENERATED_BODY()가 엔진 내부 연결 코드를 확장한다.
Reflection metadata
에디터, 블루프린트, 직렬화, GC가 같은 메타정보를 읽는다.
Details / Blueprint
무엇을 노출하려는지에 따라 붙이는 위치와 의미가 달라진다.
상속 구조, 생성 가능 여부, 블루프린트 파생 가능성 같은 타입 정보를 등록한다.
UCLASS(Blueprintable)
디테일 패널 편집, 저장/로드, GC 참조 추적, 블루프린트 접근을 제어한다.
UPROPERTY(EditAnywhere) float Health;
블루프린트 호출, 순수 함수, 네트워크 RPC 같은 함수 메타데이터를 부여한다.
UFUNCTION(BlueprintCallable) void TakeDamage();
리플렉션은 문법 장식이 아니라 엔진 도구가 C++을 이해하는 계약이다.
카테고리, 읽기 전용, 기본값 편집 가능 범위가 패널에 반영된다.
C++ 함수와 변수가 블루프린트 그래프에서 호출 가능한 형태가 된다.
레벨, 에셋, 기본값이 어떤 속성을 저장할지 판단할 수 있다.
UObject 참조가 수집 대상인지, 살아 있어야 하는지 추적한다.
리플렉션 오류는 대부분 헤더 구조와 매크로 위치에서 시작된다.
UHT가 생성한 선언이 기존 타입 선언 뒤에 이어져야 한다.
엔진이 주입하는 기본 코드가 클래스 정의 안에 들어가는 지점이다.
에디터 편집, Blueprint 호출, 저장, 네트워크 중 필요한 기능만 붙인다.