[Unreal] 언리얼 구조체
Table of Contents
언리얼 구조체의 특징 #
- 언리얼 구조체는 언리얼 오브젝트와 다르다!!
- 언리얼 구조체는 데이터 저장과 전송에 특화된 가벼운 객체이다.
- 언리얼 구조체는 단순한 데이터 타입에 적합하다.
- 보다 더 복잡한 인터렉션을 위해서는
UObject
또는AActor
서브클래스를 만드는 것이 좋다.
- 언리얼 구조체는 C++ 오브젝트이다.
- 언리얼 오브젝트가 아니므로 이름은 F로 시작한다.
- 따라서 언리얼 엔진이 메모리 관리를 해주지 않는다.
- 대부분 힙에 메모리 할당(포인터로 관리되지 않는다)을 할 필요 없이, 스택 내 데이터로 사용된다.
- 당연하지만
NewObject()
도 사용할 수 없다. - 리플리케이션(Replication) 기능도 사용할 수 없다.
- 대부분
GENERATED_BODY()
매크로를 붙인다.- 이걸 붙이면 언리얼 구조체는 내부적으로
UScriptStruct
라는 클래스로 구현된다. - 이걸 붙이면 제한적으로 리플렉션(Reflection)을 지원한다.
- 내부에
UPROPERTY()
변수만 선언할 수 있고,UFUNCTION()
은 선언할 수 없다. UPROPERTY()
를 붙인 멤버 변수는 언리얼 엔진이 메모리 관리를 해준다.
- 내부에
- 이걸 붙이면 언리얼 구조체는 내부적으로
- 언리얼 구조체를 위한 Make 및 Break 함수 자동 생성 기능이 있다.
- 먼저,
USTRUCT(BlueprintType)
로 설정해야한다. - 언리얼 구조체 안에 하나 이상의
BlueprintReadOnly
또는BlueprintReadWrite
프로퍼티가 있다면 Break가 표시된다. - Break가 생성한 순수 노드는
BlueprintReadOnly
또는BlueprintReadWrite
로 태그된 각 프로퍼티에 출력 핀을 하나씩 제공한다.
- 먼저,
언리얼 구조체 구현 방법 #
// (1) 구조체를 구현하려는 헤더파일을 연다.
USTRUCT(BlueprintType) // (2) USTRUCT() 매크로를 추가한다.
struct FMyStruct
{
GENERATED_BODY() // (3) GENERATED_BODY() 매크로를 추가한다.
// (4) 구조체의 멤버 변수를 UPROPERTY() 로 태그하여
// 언리얼 엔진의 리플렉션 시스템과 블루프린트 스크립팅에 표시할 수 있다.
//~ 다음 멤버 변수는 블루프린트 그래프를 통해 액세스할 수 있습니다.
// 테스트 변수에 대한 툴팁입니다.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Test Variables")
int32 MyIntegerMemberVariable;
//~ 다음 멤버 변수는 블루프린트 그래프를 통해 액세스할 수 없습니다.
int32 NativeOnlyMemberVariable;
/**~
* 이 UObject 포인터는 블루프린트 그래프에 액세스할 수 없으나
* UE4의 리플렉션, 스마트 포인터, 가비지 컬렉션 시스템에
* 표시됩니다.
*/
UPROPERTY()
UObject* SafeObjectPointer;
};