이득우의 언리얼 C++ 게임 개발의 정석
선언한 객체를 언리얼 엔진이 자동으로 관리하도록 하는 매크로이다.
- A 혹은 U로 시작하는 언리얼 오브젝트는 GC를 통해 관리된다.
- T 등으로 시작하는 C++ 객체는 스마트 포인터를 통해 관리된다.
- 블루프린트에서 사용하기 위한 여러가지 옵션도 제공한다.
언리얼 오브젝트가 되기 위해서는 다음을 만족해야 한다.
- 클래스 선언 위에 UCLASS() 매크로가 있어야 한다.
- 클래스 내부에 GENERATED_BODY() 매크로가 있어야 한다.
- 액터는 A, 액터가 아니면 U 등 규칙에 맞는 접두사가 붙어야 한다.
- "클래스.generated.h" 헤더를 포함해야 한다.
언리얼 헤더 툴에 의해 컴파일 때마다 자동으로 새로 생성된다. - 클래스 선언 앞에 모듈_API 키워드를 추가해 모듈 내 클래스 정보를 외부에 공개해야 한다.
실제로는 _declspec(dllexport)와 같다.
또한, 값 유형에 대한 초기화를 지원한다.
- int: 0
- float: 0.0f
- FVector: (0, 0, 0)
- ...
VisibleAnywhere
- 에디터에서 값을 확인할 수만 있다.
- 단, 컴포넌트 같은 객체 유형의 경우 다른 컴포넌트로 교체할 수 없다는 의미이며 컴포넌트 자체의 속성 값들은 변경할 수 있다.
EditAnywhere
- 에디터에서 값을 수정할 수 있다.
private 변수는 클래스 외부로 노출이 불가능하지만 EditAnywhere를 설정하면서 Meta=(AllowPrivateAccess=true)를 함께 설정해주면 에디터에서 값을 수정할 수 있다.
유니티의 SerializeField와 비슷한 기능이다.
에디터에서 private 변수의 값을 수정할 수 있다.
Edit / Visible
- 수정 가능 / 보기만 가능
Anywhere / DefaultsOnly / InstanceOnly
- 둘 다 가능 / 블루프린트 상 기본값에서만 / 뷰포트 상 객체의 값에서만
예) VisibleDefaultsOnly
블루프린트의 기본값에서만 볼 수 있다.
언리얼 헤더 툴은 컴파일 때 UPROPERTY() 매크로를 분석한 결과를 "클래스.generated.h"로 생성해 사용한다.
'Unreal Engine > 이득우의 언리얼 C++ 게임 개발의 정석' 카테고리의 다른 글
핫 리로드(Hot Reload) (0) | 2023.02.27 |
---|---|
같은 컴포넌트 이름 사용 불가 (0) | 2023.02.27 |
IWYU(Include What You Use) (0) | 2023.02.27 |
루트 컴포넌트(Root Component) (0) | 2023.02.27 |
월드 아웃라이너에서 액터의 구분 (0) | 2023.02.27 |