반응형
[Unreal] Property System(Reflection)
언리얼에서는 리플렉션 시스템을 프로퍼티라고 부른다. 왜냐하면 리플렉션은 그래픽 용어이기도 하기 때문이다. 프로퍼티 시스템에 등록했으면 하는 타입에 매크로를 달아두면 Unreal Header Tool(UHT)가 프로젝트를 컴파일할 때 정보를 수집한다. 예를 들면 다음 코드와 같다.
// 리플렉션이 있는 타입은 이 헤더파일을 인클루드해서 UHT에 알린다.
#include "MyObject.generated.h"
// MyObject는 리플렉션 되는 클래스임을 나타낸다.
UCLASS()
class UMyObject : public UObject
{
// 자동 생성된 코드가 여기에 삽입된다는 마커.
GENERATED_BODY()
// MyFunc는 리플렉션 되는 멤버 함수임을 나타낸다.
UFUNCTION()
void MyFunc(int, double) {}
// MyData는 리플렉션 되는 멤버 변수임을 나타낸다.
UPROPERTY()
int32 MyData;
// 리플렉션이 되지 않는 것을 섞어도 된다.
// 하지만 리플렉션 시스템에 보이지 않으므로 주의해야한다.
uint8 MyNum;
// 예를 들면 리플렉션 되지 않는 UObject 포인터를 저장하는 것은
// 가비지 컬렉터가 레퍼런스를 확인할 수 없기 때문에 위험하다.
UObject* MyObjectRef;
}
// MyEnum은 리플렉션 되는 열거형임을 나타낸다.
UENUM()
enum class EMyEnum
{
....
};
// MyStruct는 리플렉션 되는 구조체임을 나타낸다.
USTRUCT()
struct FMyStruct
{
GENERATED_BODY()
UPROPERTY()
int32 MyData;
// 구조체의 멤버함수는 UFUNCTION으로 지정할 수 없다!
// UFUNCTION()
void MyFunc(double) {}
}
정리가 잘 되어 있는 블로그 입니다.
generated.h와 UCLASS(), GENERATED_BODY()는 한 쌍으로 동작한다.
UCLASS()는 BP에서 이 클래스를 사용할 수 있게 해주는 역할
generated.h는 GENERATED_BODY()에 대한 헤더 GENERATED_BODY()는 생성자와 관련되어 있기도하다.
UCLASS에서 Blueprintable이나 BlueprintType을 지정하면 블루프린트 자체에서 사용할 수 있게 된다.
UCLASS()와 GENERATED_BODY() 사이에는 코드가 들어가면 안된다.
GENERATED_BODY()가 define에 의해서 코드를 만들어 주는데, 코드를 집어넣게되면 생성한 코드와 섞여 오류를 발생시킨다.
반응형
'Unreal > Manual' 카테고리의 다른 글
Unreal C++ 편리한 매크로 함수 위치(__FUNCTION__ ), 호출된 라인(__LINE__ ) (0) | 2023.11.02 |
---|---|
Unreal C++ Debug Log (BP:Print String) 출력 방법 (0) | 2023.11.02 |
Unreal C++ Class Name.Generated.h 역할 (0) | 2023.11.02 |
Unreal C++ CoreMinimal.h, Engine.h (0) | 2023.11.02 |
Unreal 프로젝트 셋팅 Export, Import (0) | 2023.10.28 |