구조체 는 멤버 프로퍼티를 체계화 및 조작할 수 있는 데이터 구조체입니다. 언리얼 엔진의 리플렉션 시스템은 구조체를 UStruct
로 인식하지만, 구조체는 UObject 생태계의 일부가 아니며, UClass 내부에서 사용됩니다.
-
동일한 데이터 레이아웃을 사용하는
UObject
보다UStruct
를 생성하는 것이 더 빠릅니다. -
UStruct는 UProperty를 지원하지만 가비지 컬렉션 시스템에 의해 관리되지 않으며 UFunction 함수를 제공할 수 없습니다.
UStruct 구현
구조체를 UStruct
로 만들려면 아래 단계를 따르세요.
-
구조체를 정의하려는 헤더(.h) 파일을 엽니다.
-
C++ 구조체를 정의하려면 구조체 정의 위에
USTRUCT
매크로를 배치하세요. -
정의의 첫 번째 줄에
GENERATED_BODY()
매크로를 포함합니다.
결과는 다음 예시와 같아야 합니다.
USTRUCT([Specifier, Specifier, ...])
struct FStructName
{
GENERATED_BODY()
};
언리얼 리플렉션 시스템과 블루프린트 스크립팅에 표시되도록 구조체의 멤버 변수에 UPROPERTY
태그를 지정할 수 있습니다. 엔진 및 에디터의 다양한 모듈에서 프로퍼티가 작동하는 방식에 대해 알아보려면 UProperty 지정자 목록을 참조하세요.
구조체 지정자
구조체 지정자(Struct Specifier) 는 구조체가 엔진 및 에디터의 다양한 측면에서 작동하는 방식을 제어하는 메타데이터를 제공합니다.
구조체 지정자 | 효과 |
---|---|
Atomic |
이 구조체가 항상 단일 유닛으로 직렬화되어야 함을 나타냅니다. 이 클래스에는 자동 생성 코드가 생성되지 않습니다. 헤더는 메타데이터로부터 파싱하기 위해서만 제공됩니다. |
BlueprintType |
이 구조체를 블루프린트의 변수에 사용할 수 있는 타입으로 노출합니다. |
NoExport |
이 클래스에는 자동 생성 코드가 생성되지 않습니다. 헤더는 메타데이터를 파싱하기 위해서만 제공됩니다. |
모범 사례 및 팁
다음은 UStruct
를 사용할 때 기억해야 할 몇 가지 유용한 팁입니다.
-
UStruct
는 가비지 컬렉션이UObject
를 제거하지 않도록 하기 위해 언리얼 엔진의 스마트 포인터 및 가비지 컬렉션 시스템을 사용할 수 있습니다. -
구조체는 간단한 데이터 타입에 가장 적합합니다. 프로젝트 내부에서 보다 복잡한 인터랙션을 하기 위해서는, 대신
UObject
또는AActor
서브클래스를 만드는 것이 좋습니다. -
UStructs
는 리플리케이션용으로 간주되지 않습니다. 그러나UProperty
변수는 리플리케이션용으로 간주 됩니다. -
언리얼 엔진에는 구조체를 위한 생성 및 소멸 함수 자동 생성 기능이 있습니다.
BlueprintType
태그로 아무UStruct
를 표시합니다.- UStruct에 하나 이상의
BlueprintReadOnly
또는BlueprintReadWrite
프로퍼티가 있다면 소멸이 표시됩니다. - 소멸이 생성한 순수 노드는
BlueprintReadOnly
또는BlueprintReadWrite
로 태그된 각 프로퍼티에 출력 핀을 하나씩 제공합니다.