- 순서
- 리플렉션이란?
- 클래스 리플렉션
- 변수 리플렉션
- 함수 리플렉션
- 리플렉션이란?
- C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터 형태로 저장하고, 이를 에디터나 블루프린트에서 활용할 수 있게 만들어주는 기술
- C++ 클래스에 있는 여러 멤버를 Reflection하여 에디터와 블루프린트에서 직접 설정, 호출이 가능함
- 프로그래머가 작성한 C++ 로직의 뼈대를 디자이너나 다른 팀원들이 에디터에서 직관적으로 조정할 수 있음
- 매개변수를 코드에서만 변경하는 것이 아니라, 에디터에서 바로 조정(슬라이더 또는 입력)하여 반복 테스트를 빠르게 진행가능
- 클래스 리플렉션
- #include ClassName.generated.h 헤더파일
- UClass() 매크로
- 해당 클래스를 언리얼 엔진의 리플렉션 시스템에 등록한다는 의미
- UClass() 매크로가 있어야 블루프린트 등 에디터 차원에서 해당 클래스를 인식하고 사용할 수 있음
- 주요 지정자
- UClass() 매크로를 통해 추가적인 옵션을 설정할 수 있음
- 옵션을 주지 않으면, 블루프린트에서 상속이 가능하고 변수로 참조가 가능한 형태로 등록됨. => 내부적으로 Blueprintable, BlueprintType과 동일한 효과를 가지게 됨
- Blueprintable: 블루프린트에서 상속 가능한 클래스로 만듬
- NotBlueprintable: 블루프린트에서 해당 클래스르 상속할 수 없도록 함
- BlueprintType: 블루프린트에서 변수나 참조로 사용할 수 있음, 해당 옵션만 있으면 상속은 허용하지 않고 참조만 가능하게 함.
- 필요에 따라 지정자들을 조합해 클래스가 블루프린트와 어떻게 상호작용해야 할지 명시할 수 있음
- GENERATED_BODY()
- 언리얼의 코드 생성 도구가 사용하는 코드를 삽입하는 역할
- 클래스 내부에 필요한 리플렉션 정보를 자동으로 생성해줌.
- 변수 리플렉션
- UPROPERTY() 매크로는 여러 지정자를 통해, 에디터에서의 표시 여부나 Blueprint 접근성, 읽기/쓰기 권한 등을 자세하게 설정 가능
- UPROPERTY() 매크로
- 편집가능 범위 지정자
- VisibleAnywhere: 읽기 전용으로 표시되며, 수정 불가능
- EditAnywhere: 클래스 기본값, 인스턴스 모두에서 수정 가능
- EditDefaultOnly: 클래스 기본값에서만 수정 가능
- EditInstanceOnly: 인스턴스에서만 수정 가능
- Blueprint 접근성 지정자
- BlueprintReadWrite: Blueprint 그래프에서 Getter/Setter로 값을 읽거나 쓸 수 있음
- BlueprintReadOnly: Blueprint 그래프에서 Getter로 사용할 수 있음.
- Category 지정자
- Details 패널에서 Category로 분류한 변수는 Rotation 범위 아래에 표시됨
- 비슷한 여러 변수를 카테고리로 묶으면, 세부 정보 패널에서 보기 편해짐.
- 메타 옵션 지정자
- meta=(ClampMin="0.0"): 에디터에서 변수 입력 시 최소값을 제한할 수 있음
- meta=(AllowPrivateAccess="true"): 해당 멤버가 private으로 선언되어 있어도, 에디터나 Blueprint에서 접근할 수 있음
- 지정자를 쓰지 않으면 UPROPERTY()처럼 리플렉션에 등록되지만 블루프린트에 노출되지는 않음 => 엔진이 함수의 존재는 파악하되, Blueprint에서 직접 호출할 수 없게 숨겨둔 상태
- 리플렉션에 등록만 되어 있어도 GC와 직렬화 같은 엔진 내부 기능이 작동 가능함.
- 편집가능 범위 지정자
- 함수 리플렉션
- 함수를 리플렉션하면 C++로직을 Blueprint에서 간단한 노드로 불어와 제어할 수 있음 => 작업효율이 올라감
- UFUNCTION()은 멤버함수를 등록함
- UFUNCTION() 매크로
- Blueprint 관련 지정자
- BlueprintCallable: Blueprint 이벤트 그래프(노드)에서 호출 가능한 함수로 만듬
- BlueprintPure: Getter 역할만 수행(Exec 핀 없이 Return Value만 노출)
- BlueprintImplementableEvnet: 함수의 선언만 C++에 있고, 구현은 블루프린트에서 함
- 지정자를 쓰지 않으면 UPROPERTY()처럼 리플렉션에 등록되지만 블루프린트에 노출되지는 않음 => 엔진이 함수의 존재는 파악하되, Blueprint에서 직접 호출할 수 없게 숨겨둔 상태
- Blueprint 관련 지정자
'Unreal Engine' 카테고리의 다른 글
| [UnrealEngine] Enhanced Input System (0) | 2025.08.01 |
|---|---|
| [Unreal Engine] Unreal Engine_C++ 매크로 (5) | 2025.07.16 |
| [Unreal Engine]Unreal_C++ 빌드 프로세스 (0) | 2025.07.07 |
| [Unreal Engine] Actor의 라이프사이클 (2) | 2025.07.01 |
| [Unreal Engine] 활용 프로그램 제작해보기 (1) | 2025.06.17 |