UCLASS, UPROPERTY

Taegang Yun·2023년 8월 2일
  • UObject에서 파생된 UCLASS는 U로 시작하는 이름이어야 한다.
  • Actor에서 파생된 UCLASS는 A로 시작하는 이름이어야 한다.
  • 일반적인 C++ 클래스는 특별한 이름 규칙이 없지만, 원하는 경우 앞에 F를 붙여 이름을 정할 수 있다.

UCLASS

UObject에서 파생.

UCLASS 매크로를 사용해 커스텀 C++ 오브젝트를 선언하면 UE4 클래스처럼 동작하는 커스텀 C++ 클래스를 선언 할 수도 있다.
UCLASS 매크로를 사용하면 할당과 해제를 할 때 클래스가 UE4 의 스마트 포인터와 메모리 관리 루틴을 사용하게 된다.

  • UCLASS 는 UE4 매크로를 다수 포함한 C++ 클래스이다. 이 매크로는 UE4 편집기와의 통합을 도와주는 추가 C++ 헤더 코드를 생성한다.
  • UCLASS 매크로를 사용할 때, UCLASS 오브젝트의 생성과 삭제는 UE4에 의해 처리돼야 한다. 오브젝트의 인스턴스를 생성할 때는 ConstructObject 함수를 사용해야 하며 오브젝트를 삭제 할때는 UObject::ConditionBeginDestroy() 함수를 사용해야 한다.

UPROPERTY

: UPROPERTY의 역할은 기본적으로 언리얼 리플렉션 시스템에 해당 프로퍼티가 있음을 알리는 것이다. 빌드 시에 UHT(Unreal Header Tool)이 이 매크로를 감지하고 리플렉션 유형에 추가하게 된다. 이렇게 언리얼 리플렉션 시스템에 추가된 UPROPERTY는 가바지 콜렉션에 의해 생명 주기가 관리되며, 리플렉션을 통해 이 멤버 변수의 이름, 유형 응을 런티임 중에 확인할 수 있다.

지정자ReadWriteReadOnlySetterGetter
Blueprint블루프린트에서 읽거나 쓸 수 있음블루프린트에서 읽을 수 있지만 변경은 안 됨BlueprintReadWrite을 바탕으로 블루프린트에서 변수를 Set할 때-
  • 아키타입 : 컨텐츠 브라우저 상에 표시되는 C++ 또는 블루프린트 클래스
  • 인스턴스 : 아키타입을 통해 생성된 객체
지정자DefaultsOnlyInstanceOnlyAnywhere
Edit아키타입상에서만 값을 편집할 경우인스턴스상에서만 값을 편집해야 할 경우아키타입 또는 인스턴스 모두에서 범용적으로 값을 편집해야 할 경우
Visible아키타입에서만 보여야 할 경우인스턴스에서만 보여야 할 경우아키타입 또는 인스턴스 모두에서 보일 값이여야 할 경우

Transient 키워드

언리얼 오브젝트에는 직렬화 기능이 있어서 오브젝트의 UPROPERTY 속성을 저장하고 로딩할 수 있다.
컴포넌트의 스탯 중 CurrentHP 값은 게임을 시작할 때마다 변경되므로 이 값을 보관하는 것은 의미가 없다. 오히려 오브젝트를 저장할 때 필요없는 디스크 공간만 차지한다.

이러한 속성에는 Transient 키워드를 추가해 해당 속성을 직렬화에서 제외시키는 것이 좋다.

그 외 키워드

  • Category : "카테고리 명" -> 속성을 관리할 수 있게 분류하는 기능
  • meta = (AllowPrivateAccess = true) : 변수를 은닉(Private)하면서, private 변수를 블루프린트에 노출할 수 있으며 에디터에서 편집이 가능하게 설정할 수 있다.
profile
언젠간 전문가가 되겠지

0개의 댓글