1. 구조체 선언
USTRUCT([Specifier, Specifier, ...])
struct StructName
{
GENERATED_BODY()
};
게임플레이 클래스의 구조체는 일반 C++ 구조체 선언 위에 USTRUCT 매크로를 사용하여 선언하며, USTRUCT 매크로에 구조체 지정자를 추가하여 엔진 및 에디터의 다양한 부분에서 어떤식으로 작동할지를 제어할 수 있습니다.
그리고 구조체 안에는 일반 변수, UProperty 변수, 함수, 연산자를 포함할 수 있습니다.
구조체 선언시 주의할 점은 구조체는 클래스 선언 이전에 선언되어야 한다는 것입니다.
2. 구조체 지정자
구조체 지정자 | 효과 |
Atomic | 이 구조체는 항상 하나의 단위로 Serialize 됨을 나타냅니다. |
BlueprintType | 이 구조체를 블루프린트에서 변수로 사용할 수 있는 유형으로 노출시킵니다. |
NoExport | 이 클래스에 대해서는 자동생성 코드가 생성되지 않으며, 헤더는 메타데이터 분석을 위해서만 제공됩니다. |
구조체 선언시, 위 표에 있는 구조체 지정자를 붙여 구조체가 엔진과 에디터의 다양한 부분에서 어떤식으로 작동할지를 제어할 수 있습니다.
3. 구조체 구현
USTRUCT(BlueprintType)
struct FMyStruct
{
GENERATED_BODY()
// 다음 멤버 변수는 블루프린트 그래프에서 접근할 수 있습니다:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Test Variables")
int32 MyIntegerMemberVariable;
// 다음 멤버 변수는 블루프린트 그래프에서 접근할 수 없습니다:
int32 NativeOnlyMemberVariable;
// 이 UObject 포인터는 블루프린트 그래프에서 접근할 수 없지만
// UE4의 리플렉션, 스마트 포인터, 가비지 컬렉션 시스템에서는 볼 수 있습니다.
UPROPERTY()
UObject* SafeObjectPointer;
};
구조체의 구현은 다음과 같은 스텝으로 진행하면 됩니다.
- 구조체를 정의할 헤더 파일에 일반 C++ 구조체를 정의합니다.
- 요구사항에 알맞는 구조체 지정자를 포함한 USTRUCT 매크로를 구조체 상단에 추가합니다.
- 구조체의 멤버 변수, 함수 및 연산자를 선언합니다. 여기서 태그를 사용하여 언리얼 엔진의 리플렉션 시스템 및 블루프린트 스크립팅에 노출시킬 수도 있습니다.
4. 구조체 사용시 유의사항
- 구조체는 언리얼 엔진의 스마트 포인터 및 가비지 컬렉션 시스템을 사용하여 가비지 컬렉팅에 의해 제거되지 않도록 할 수 있습니다.
- 구조체는 서로 다르며 간단한 데이터 유형에 가장 적합합니다.
- 프로젝트 내에서 더 복잡한 상호 작용을 위해 구조체 대신 하위 클래스를 만들 수 있습니다.
- 구조체는 복제에 고려되지 않습니다.
- 구조체 안의 UProperty 변수는 복제에 고려됩니다.
'언리얼 C++ 프로그래밍' 카테고리의 다른 글
[언리얼 C++] 프로그래밍 서브시스템 (0) | 2021.08.01 |
---|---|
[언리얼 C++] 게임플레이 디버거 (0) | 2021.07.31 |
[언리얼 C++] 프로퍼티 선언 (0) | 2021.07.29 |
[언리얼 C++] 인터페이스 클래스 (0) | 2021.07.28 |
[언리얼 C++] 게임플레이 모듈 (0) | 2021.07.27 |