게임엔진/Unreal

[Unreal] 클래스 생성시 FObjectInitializer 사용법 (기본 컴포넌트 변경)

ShovelingLife 2022. 8. 17. 21:43

FObjectInitializer 구조체를 이용해서 특정 맴버를 초기화 시키는 두가지의 방법이 있다. 

 

1. 클래스 생성자 매크로를 GENERATED_BODY() -> GENERATED_UCLASS_BODY() 로 변경하고 const FObjectInitializer& ObjectInitializer 가 있는 생성자를 구현하는 방법

// .h 파일
 
UCLASS()
class XXXX_API ClassA : public APawn
{
    GENERATED_UCLASS_BODY() // 언리얼에서 클래스를 생성하면 GENERATED_BODY()가 디폴트
    // 기타 클래스 세팅...
}
 
 
 
// .cpp 파일
// GENERATED_UCLASS_BODY()사용시 선언이 들어가므로 .cpp에 해당 구현만 처리하면 됨
ClassA::ClassA(const FObjectInitializer& ObjectInitializer)
    :Super(ObjectInitializer)
{
    // 초기화 코드(컴포넌트 생성, 데이터 기본값처리등등)
}

 

2. const FObjectInitializer& ObjectInitializer 생성자를 직접 정의, 구현하는방법

// .h 파일
 
UCLASS()
class XXXX_API ClassB : public APawn
{
    GENERATED_BODY() // FObjectInitializer 생성자를 직접 선언하므로 따로 GENERATED_UCLASS_BODY() 를 해줄필요없음
 
public:
    // Sets default values for this pawn's properties
    ClassB(const FObjectInitializer& ObjectInitializer);
    // ...
}
 
 
 
// .cpp 파일
ClassB::ClassB(const FObjectInitializer& ObjectInitializer)
    :Super(ObjectInitializer)
{
    // 초기화 코드(컴포넌트 생성, 데이터 기본값처리등등)
}


추가)
FObjectInitializer를 이용한 클래스 생성자를 사용한경우 기본 생성자부분이 호출되지 않는걸 확인했다.(4.18기준) 두 생성자를 혼용해서 사용하지 않도록 유의하자.

 

출처 : https://blog.daum.net/peace-day/12