본문 바로가기
::protected/언리얼4&5

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

by 해맑은욱 2019. 11. 12.

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

c++ 는 리플렉션이 지원되지 않아서 언리얼 자체적으로 구축된 시스템이다.

리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아주면 Unreal Header Tool(UDT)가 그 프로젝트를 컴파일할 때 해당 정보를 수집한다.

헤더에 리플렉션이 있는 유형으로 마킹을 하려면 파일 상단에 #include "FileName.generated.h" 를 추가해야 한다.

이후 UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY() 를 사용하여 헤더의 다양한 유형과 멤버 변수 주석을 달 수 있다.

 

// 언리얼 오브젝트가 되려면

#include "헤더이름.generated.h" 

;오브젝트 선언 마지막에 선언해야 한다.

 언리얼 헤더 툴을 사용해 클래스 선언을 분석하고 실행 환경에 필요한 정보가 "헤더이름.generated.h" 으로 생성됨.

 

// 마크업

UCLASS()               

;클래스의 리플렉션 데이터를 생성하게 한다.

USTRUCT()             

;구조체의 리플렉션 데이터를 생성하게 한다.

GENERATED_BODY() 

;해당 유형에 대해 생성되는 전체 필수 표준 코드로 대체한다.

UPROPERTY()         

;UCLASS or USTRUCT 의 멤버 변수를 UPROPERTY 로 사용할 수 있게 한다.

UFUNCTION()         

;UCLASS or USTRUCT 의 메서드를 UFUNCTION 으로 사용할 수 있게 한다.   

 

// 마크업 부가 지정자

Blueprintable       

;클래스를 블루프린트로 확장시킬 수 있다.

BlueprintReadOnly 

;프로퍼티를 블루프린트에서 읽을 수는 있지만, 쓰기는 불가능하다.

BlueprintReadWrite 

;프로퍼티를 블루프린트에서 읽고 쓰기가 가능하다.

EditAnywhere        

;프로퍼티를 아키타입과 인스턴스의 프로퍼티 창에서 편집할 수 있다.

VisibleAnywhere

;프로퍼티를 아키타입과 인스턴스의 프로퍼티 창에서 볼 수 있다.

Category             

;프로퍼티를 에디터의 디테일 뷰에서 어느 섹션 아래 나타나도록 할지를 정의한다. 정리용.

BlueprintCallable   

;함수를 블루프린트에서 호출할 수 있다.

 

#include "StrategyTypes.h"
#include "StrategyChar.generated.h" 
 
UCLASS(Abstract)
class AStrategyChar : public ACharacter, public IStrategyTeamInterface
{
 
GENERATED_UCLASS_BODY()
 
UPROPERTY(EditAnywhere, Category=Pawn)
int32 ResourcesToGather;
 
UFUNCTION(BlueprintCallable, Category=Attachment)
void SetWeaponAttachment(class UStrategyAttachment* Weapon);
 
UFUNCTION(BlueprintCallable, Category=Attachment)
bool IsWeaponAttached();
 
protected:
UPROPERTY(EditDefaultsOnly, Category=Pawn)
UAnimMontage* MeleeAnim;
 
UPROPERTY()
UStrategyAttachment* ArmorSlot;
 
uint8 MyTeamNum;
 
...
};
cs

 

 

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

리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다. 이는 엄청나게 유용한 데다 언리얼 엔진 테크놀로지의 근간을 이루는 것으로, 에디터의 디테일 패널, 시리얼라이제이션, 가비지 콜렉션, 네트워크 리플리케이션, 블루프린트/C++ 커뮤니케이션 등 다수의 시스템에 탑재된 것입니다. 그러나 C++ 는 어떠한 형태의 리플렉션도 지원하지 않아, 언리얼에는 자체적으로 C++ 클래스, 구조체, 함수, 멤버 변수, 열거형 관련 정보를 수

www.unrealengine.com

 

'::protected > 언리얼4&5' 카테고리의 다른 글

컴포넌트(Component)  (0) 2019.11.12
콜리전(Collision)  (0) 2019.11.12
가비지 컬렉션(Garbage collection)  (0) 2019.11.12
TSubclassOf  (0) 2019.11.12
오브젝트(Object) 생성  (0) 2019.11.12