언리얼 엔진 리플렉션 시스템(UE Reflection System)이란?
C++에서 지원하지 않는 리플렉션 기능을 언리얼 엔진 자체에서 구현한것으로,
매크로 선언을 통해 언리얼 에디터 자체에서 자신의 구조(변수, 함수 등)을 조사하여 에디터 내에 노출하거나 접근 및 수정이 가능하도록 하는 시스템이다.
줄이면, C++내 함수 또는 변수에 매크로를 선언하여 언리얼 에디터 내에서 노출 및 편집할 수 있도록 하는 시스템.
사용법
매크로 선언 방법

UPROPERTY(Specifier1, Specifier2, meta = (MetaTag1 = "Value", MetaTag2 = "Value"))
UPROPERTY매크로는 위의 형태로 이루어지며, 지정된 설정은 바로 아래에 오는 변수 리플렉션에 적용된다.
지정자, 카테고리, 메타값을 정해진값 내에서 원하는대로 서설정이 가능하다.
주요 지정자(Specifier) 종류
UPROPERTY(변수)
| Specifier 이름 | 설명 |
| VisibleAnywhere | 에디터에 표시됨(일반적으로 컴포넌트 포인터에 사용) |
| VisibleDefaultsOnly | 클래스 디폴트에서만 보임 |
| VisibleInstanceOnly | 인스턴스에서만 변수값을 볼수 있음 |
| EditAnywhere | 아키타입(에셋, 클래스 디폴트)과 인스턴스 모두에서 수정 가능 |
| EditDefaultsOnly | 아키타입(에셋, 클래스 디폴트)에서만 수정 가능하지만 레벨 인스턴스에서는 편집 불가능 |
| EditInstanceOnly | 레벨에 배치된 인스턴스에서만 수정이 가능 |
| BlueprintReadWrite | 블루프린트에서 읽기/쓰기 허용 / Get/Set 노드 모두 사용가능 |
| BlueprintReadOnly | 블루프린트에서 읽기만 허용 / Get노드 사용가능 |
| BlueprintAssignable | 이벤트 디스패쳐 델리게이트 전용, 델리게이트 이벤트에 변수를 바인딩 |
| BlueprintImplementableEvent | 이벤트 함수로 선언하여 블루프린트에서 사용가도록 한다. 선언은 C++에서, 구현은 블루프린트에서 진행되도록 한 |
| BlueprintNativeEvent | 이벤트를 C++ 에서 구현하는 방법. 이 경우 이벤트 함수의 이름 끝에는 "_Implementation"가 포함되어야 한다. |
Visible~~지정자와 Edit~~~지정자는 수정 가능여부의 차이를 보이며 두가지를 동시에 사용하는것은 불가능하다.
예시로 VisibleAnywhere로 설정하고 EditInstanceOnly로 인스턴스에서만 설정하도록 하는 그런것이 불가능하다는 것이다.
그런상황을 만들고싶다면 메타값을 잘 활용하는 방법이 있다.
Blueprint~~ 지정자로 블루프린트에서 읽기 쓰기 여부를 선택 가능하다.
읽기/쓰기 여부 설정이 기본적이며, 이벤트 객체 변수일 경우 BlueprintAssignable를 사용한다
UFUNCTION(함수)
| Specifier 이름 | 설명 |
| BlueprintCallable | 블루프린트 그래프에서 이 함수를 호출할 수 있는 노드로 나타낸. |
| BlueprintPure | 실행 핀(하얀 화살표)이 없는 노드를 생성합니다. 값을 반환하기만 하고 객체의 상태를 변경하지 않는 함수(Getter 등)에 사용한다. |
| BlueprintImplementableEvent | C++에서 본체를 작성하지 않고, 블루프린트에서 로직을 구현하도록 한다 |
| BlueprintNativeEvent | C++에서 기본 로직을 구현하고, 블루프린트에서 이를 오버라이드(재정의)할 수 있게 한다. 이 경우 이벤트 함수의 이름 끝에는 "_Implementation"가 포함되어야 한다 |
| Server | 클라이언트가 호출하지만 서버에서 실행되는 함수입니다. |
| Client | 서버가 호출하지만 해당 액터를 소유한 클라이언트에서 실행되는 함수입니다. |
| NetMulticast | 서버에서 호출되고 서버 및 연결된 모든 클라이언트에서 실행됩니다. |
| Reliable | RPC 전송의 신뢰성을 결정합니다. Reliable은 반드시 전송됨을 보장합니다. |
| Unreliable | RPC 전송의 신뢰성을 결정합니다. Reliable은 반드시 전송됨을 보장합니다. |
서버관련은 필자가 사용해보지 않았지만 추가함.
카테고리 사용법
카테고리 사용법은 매우 간단하다.
Category="Category1|Category2" 이런식으로 사용이 가능하다.
버티컬 바 '|' 를 이용하여 위처럼 계층 구조를 나타낼 수 있다.
예시로 "Item|Components"가 되면 아래 사진처럼 계층구조가 된다.


왼쪽은 Item|Components, 오른쪽은 디테일 패널에서 Item/Components에서 Static Mesh Comp를 확인할 수 있다.
주요 메타 태그(Metadata Sepcifiers)
변수의 세밀한 설정을 담당한다.
주요한 몇가지만 살펴보자면
- AllowPrivateAccess = “true”: private 섹션에 선언된 변수를 블루프린트에 노출할 때 사용합니다.
- ClampMin / ClampMax: 숫자 변수의 입력 범위를 제한합니다.
- UIMin / UIMax: 상세 패널의 슬라이더 범위를 제한합니다 (직접 입력으로 범위 밖 값 입력 가능).
- DisplayName: 에디터에서 변수 이름 대신 보여줄 별칭을 지정합니다.
- EditCondition: 특정 bool 변수가 true일 때만 편집 가능하도록 활성화합니다.
- ToolTip: 에디터에서 변수에 마우스를 올렸을 때 나타나는 설명을 작성합니다.
예로 툴팁을 추가하고 싶다면
meta = (ToolTip = "툴팁 설명란")
정도로 매크로 파라미터를 추가하고 괄호 내에서 여러개 설정이 가능하다.
UFUNCTION, UPROPERTY외에도 여러 매크로와 이에 맞는 메타데이터 지정자가 존재하니
자세한 매크로 파라미터값은 아래로
https://dev.epicgames.com/documentation/unreal-engine/metadata-specifiers-in-unreal-engine
Metadata Specifiers in Unreal Engine | Unreal Engine 5.7 Documentation | Epic Developer Community
Metadata keywords used when declaring UClasses, UFunctions, UProperties, UEnums, and UInterfaces to specify how they behave with various aspects of Unre...
dev.epicgames.com
'개발 > 언리얼' 카테고리의 다른 글
| 언리얼 빌드 이해하기(UBT, UHT, CDO, GC) (0) | 2026.04.10 |
|---|---|
| 언리얼 c++로 움직이는 액터 구현하기 (0) | 2026.04.10 |
| 액터의 생명주기 간단하게 정리 (0) | 2026.04.07 |
| c++ 액터 클래스 뼈대 만들기 (0) | 2026.04.07 |
| 팹 라이브러리에서 원하는 에셋만 가져오도록 관리하기(마이그레이션) (0) | 2026.03.24 |