게임엔진/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기준) 두 생성자를 혼용해서 사용하지 않도록 유의하자.