언리얼 프로퍼티 시스템(리플렉션)
[이득우의 언리얼 프로그래밍 수업의 정리]
리플렉션 시스템은 프로그램이 자기 자신을 조사하는 기능.
->딱봐도 핵심 기능인 것 같다.
C++에선 지원하지 않아 언리얼에서 자체적으로 구축.
리플렉션 시스템이 보였으면 하는 유형이나 프로퍼티에 주석을 달면 Unreal Header Tool (UHT)가 프로젝트를 컴파일 할 때 해당 정보를 수집함.
UPROPERTY 매크로로 정의되지 않은 멤버 변수도 같은 클래스에서 사용 가능. 하지만 해당 리플렉션에 의존하는 시스템 전부에 보이지 않는다는것 주의.
(리플렉션 되지 않은 UObject의 포인터 그대로를 저장하면 보통 가비지 콜렉터가 레퍼런스를 확인할 수 없기 때문에 위험한 일. -> 메모리 누수나 nullpointerexception 같은 오류가 발생하는건가? 사용하다 보면 알 수 있을듯.)
-> 언리얼 엔진에서 UPROPERTY로 선언된 포인터의 메모리를 관리해줌. 저 매크로로 정의하지 않는다면 직접 메모리 관리해야함
UHT가 직접 컴파일을 하는것은 아니기 때문에 정교하지 않으므로 너무 복잡한 정의는 읽어들이지 못한다는 단점 존재.
언리얼 오브젝트에 지정하여 관리하는
변수는 UPROPERTY, 함수는 UFUNCTION 매크로 사용.
이런 오브젝트들은 모두 클래스 정보와 함께하며 클래스를 사용해 자신이 가진 프로퍼티와 함수 정보를 컴파일타임, 런타임에서 조회 가능.
일반 오브젝트와 다르게 언리얼 오브젝트는 NewObject()라는 별도의 API를 사용해 생성.
언리얼 C++ 오브젝트를 생성하고 GetClass(), StaticClass()로 오브젝트를 사용하는 UClass에 정보 가져옴.
언리얼 클래스 정보에는 클래스 기본 오브젝트(Class Default Object -> CDO)가 함께 포함되어 있음.
한 클래스로부터 다수의 물체를 생성해 게임 콘텐츠에 배치할 때 일관성 있게 기본 값을 조정하는데 유용하게 사용.
(모듈화를 쉽게 해주는 기능인듯함.)
CDO는 클래스 정보(UClass)로부터 GetDefaultObject() 함수를 사용해 얻는다.
UClass 및 CDO는 엔진 초기화 과정에서 생성되므로 이후 콘텐츠 제작에서 안심하고 사용 가능
'Unreal 이론' 카테고리의 다른 글
언리얼 델리게이트 (0) | 2024.08.14 |
---|---|
언리얼 컴포지션 (0) | 2024.08.13 |
언리얼 인터페이스 (0) | 2024.08.08 |
언리얼 오브젝트 개념 (0) | 2024.08.03 |
C2338 - 매크로 관련 에러 (0) | 2024.08.02 |