리플렉션은 프로그램이 실행시간에 자기 자신을 조사하는 기능이다.
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 |
'::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 |