]: When?
Unreal Source의 생성자에서 심심찮게 볼 수 있는 친구다.
부모 Class에서의 DefaultSubObject의 Type을 바꾸고 싶거나, 아예 생성하고 싶지 않을 때, 사용할 수 있다.
]: Why?
상속의 과정에서 어떤 Derived Class는 부모의 SubObjectClass를 확장한 SubObject를 사용하고 싶거나, 아예 Object 자체를 생성하고 싶지 않은 경우가 있을 수 있다.
예를 들어, ACharacter의 CharacterMovement Component는 ACharacter의 SubObject로 Custom Engine Build가 아닌 이상 저 부분을 건드릴 수 있는 방법은 없다.
하지만 CharacterMovement를 확장한 Component로 해당 부분을 사용하고 싶은 경우는 있을 수 있다.
이럴 경우, FObjectInitializer를 사용하여야 한다.
]: How?
ASH_Character::ASH_Character(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass<USH_CharacterMovementComponent>(ACharacter::CharacterMovementComponentName))
위와 같은 문법으로, 상위 클래스에서 지정한 SubObject의 Class를 바꿀 수 있다.
어떻게 이러한 과정이 수행되는지는 아래와 같은 코드를 확인할 수 있다.
// FObjectInitializer -> CreateDefaultSubObject
FOverrides::FOverrideDetails ComponentOverride = SubobjectOverrides.Get(SubobjectFName, ReturnType, ClassToCreateByDefault, !bIsRequired);
const UClass* OverrideClass = ComponentOverride.Class;