본문 바로가기
Unreal Engine/UE4 C++ 게임 개발 공부

[짤막 팁] UE4 클래스 생성 시 FObjectInitializer 사용법

by JJPearl 2022. 6. 30.
반응형

UE4에서 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)
{
    // 초기화 코드(컴포넌트 생성, 데이터 기본값처리등등)
}

직관성은 2번이 더 좋다.

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

반응형