안선생의 개발 블로그

[UE5] 리플렉션 본문

언리얼

[UE5] 리플렉션

안선생 2023. 12. 14. 21:33

리블렉션이란?

리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다.

리플렉션을 통해 엔진은 객체가 다른 객체에 의해 참조되고 있는지 여부를 결정할 수 있으므로,
Garbage Collection을 실행 가능할 수 있게 한다.

리플렉션은 블루프린트 시스템, 에디터 도구, 네트워킹, 시리얼라이제이션 등 다양한 부분에서 활용됩니다.

 

이것을 "언리얼 프로퍼티 시스템"이라고 하는데 메크로 함수 형태로 되어 있으며 이것을 통해 GC(Garbage Collection)나 블루프린트와 연동 등을 할 수 있습니다, 

 

리플렉션 알리는 방법

헤더에 리플렉션이 있는 유형으로 마킹을 하려면, 파일 상단에 특수한 include 를 추가해 줘야 합니다. 그러면 리플렉션이 있는 유형은 이 파일을 고려해야 함을, 시스템 구현에도 필요함을 UHT 에 알려줍니다.

그 #include는 아래와 같습니다.

#include "FileName.generated.h"

 

이제 UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY() 를 사용하여 헤더의 다양한 유형과 멤버 변수 주석을 달 수 있습니다. 이 매크로 각각은 유형 및 멤버 선언 전에 오며, 추가적인 지정자 키워드를 담을 수 있습니다. 

 

UCLASS,USTRUCT 리플렉션 알리는 방법

 UCLASS() 를 사용하여 리플렉션 되었음을 나타내고, C++ 정의 안에서는 GENERATED_UCLASS_BODY() 매크로와 짝을 이루기도 합니다. GENERATED_UCLASS_BODY() / GENERATED_USTRUCT_BODY() 매크로는 리플렉션된 클래스나 구조체에 필수적인데, 클래스 본문에 추가적인 함수나 typedef 를 주입하기 때문입니다. 

클래스나 구조체안에 GENERATED_UCLASS_BODY()  매크로를 넣어줘야합니다.

 GENERATED_BODY() 매크로

  • 언리얼 오브젝트로 만든 클래스가 언리얼 시스템을 위한 추가적인 함수, Super:: 또는 ThisClass::와 같은 유용한 typedef를 사용할 수 있게 해준다.

 

 

리플렉션  사용법

언리얼 엔진에서 리플렉션은 UCLASS, UFUNCTION, UPROPERTY 등과 같은 매크로를 사용하여 지정됩니다. 각각의 매크로는 클래스, 함수, 프로퍼티 등을 정의하면서 동시에 리플렉션 정보를 언리얼 엔진에게 제공합니다.

예를 들어, UPROPERTY 매크로는 클래스의 프로퍼티를 정의하고 리플렉션 정보를 추가합니다. 다음은 간단한 언리얼 엔진 클래스의 예시입니다:

#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyActor")
    float MyProperty;
};

이 코드에서 AMyActor 클래스에는 MyProperty라는 프로퍼티가 있습니다. UPROPERTY 매크로를 사용하여 언리얼 엔진에게 이 프로퍼티에 대한 리플렉션 정보를 제공합니다. 이제 개발자는 런타임 중에 AMyActor 객체의 MyProperty를 동적으로 읽거나 쓸 수 있습니다.

 

요약

1. 리플렉션은 프로그램이 실행시간에 자기 자신을 조사하는 기능

2. 리플렉션을 통해 엔진은 객체가 다른 객체에 의해 참조되고 있는지 여부를 결정할 수 있으므로, Garbage Collection을 실행 가능할 수 있게 한다.

3. 리플렉션은 UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY()매크로로 사용

4. 각각의 매크로는 클래스, 함수, 프로퍼티 등을 정의하면서 동시에 리플렉션 정보를 언리얼 엔진에게 제공

5. 리플렉션은 주로 언리얼 엔진의 블루프린트 시스템, 시리얼라이제이션, 네트워크 통신, 에디터 도구 등 다양한 기능에서 활용

 

 

https://www.unrealengine.com/ko/blog/unreal-property-system-reflection

 

언리얼 프로퍼티 시스템 (리플렉션)

리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다. 이는 엄청나게 유용한 데다 언리얼 엔진 테크놀로지의 근간을 이루는 것으로, 에디터의 디테일 패널, 시리얼라

www.unrealengine.com

 

'언리얼' 카테고리의 다른 글

[UE5] 애니메이션 리타겟팅  (0) 2023.12.22
[UE5] 언리얼 Mixamo 루트모션 적용  (1) 2023.12.21
[UE5] 언리얼 가비지 컬렉션  (0) 2023.12.09
[UE5] 언리얼 스마트 포인터  (0) 2023.12.03
[UE5] TWeakObjetPtr  (0) 2023.11.27