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기준) 두 생성자를 혼용해서 사용하지 않도록 유의하자.
'게임엔진 > Unreal' 카테고리의 다른 글
[Unreal] Static Mesh (스태틱 메쉬) 그림자 끄는/키는 방법 C++ (0) | 2022.08.23 |
---|---|
[Unreal] 사용자 정의 컴포넌트 (UActorComponent) (0) | 2022.08.22 |
[Unreal] 캐릭터 이동 관련 컴포넌트 (UCharacter / UPawn MovementComponent*) (0) | 2022.08.15 |
[Unreal] C++ 인터페이스 (UInterface) (0) | 2022.08.14 |
[Unreal] csv 파일 불러온 후 읽어들이기 (0) | 2022.08.05 |