언리얼에서 부모 클래스를 만들고, 이를 파생시킨 서브클래스를 만들 때 막혔던 부분이 있다.
그것은 부모 생성자에서 만든 오브젝트를 자식 클래스에서 새로 할당해줘야 할 때였다.
직관적으로 코드를 짰을 때는 아래와 같이 작성했다.
// Parent Class cpp
AParentClass::AParentClass()
{
SampleObject = CreateDefaultSubobject<USampleObject>(TEXT("SampleObject");
}
// Child Class cpp
AChildClass::AChildClass()
{
SampleObject = CreateDefaultSubobject<USampleObject>(TEXT("SampleObject");
}
그런데 이렇게 작성한 후 빌드를 하면 크래쉬가 나면서 터진다.
Fatal error: [File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp] [Line: 5385] Default subobject UObject SampleObject already exists for AChildClass /Script/Project.Default__AChildClass.
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_ZombieTamer!AChildClass::AChildClass() [C:\Development\Unreal\Project\Source\AChildClass.cpp:9]
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_Core
...
크래쉬 로그를 보면, Default Subojbect SampleObject가 이미 존재해서 오류가 났다고 한다.
언리얼에서 부모 클래스 생성자에서 만든 A 오브젝트를, 자식 클래스 생성자에서 B로 바꾸기 위해서는 특별한 생성자를 사용해야한다.
AChildClass::AChilClass(const FObjectInitializer& ObjectIntializer)가 바로 그것이다.
FObjectIntializer는 부모 클래스에서 CDO를 초기화 하기전에, 클래스 프로퍼티 기본값 등을 바꿀 수가 있다.
// Parent Class .h
class Project_API AParentClass : public UObject
{
GENERATED_UCLASS_BODY()
//...
}
// Parent Class .cpp
AParentClass::AParentClass(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
SampleObject = CreateDefaultSubobject<USampleObject>(TEXT("SampleObject");
}
// Child Class .h
class Project_API AChildClass : public AParentClass
{
GENERATED_UCLASS_BODY()
//...
}
// Child Class .cpp
AChildClass::AChildClass(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass<USampleObject>(TEXT("SampleObject")))
{
}
프로퍼티 기본값 수정 외에, 특정 컴포넌트를 만들지 못하도록 설정할 수도 있다.

참고
https://dev.epicgames.com/documentation/unreal-engine/API/Runtime/CoreUObject/FObjectInitializer
FObjectInitializer | Unreal Engine 5.8 Documentation | Epic Developer Community
Internal class to finalize [UObject](API\Runtime\CoreUObject\UObject) creation (initialize properties) after the real C++ constructor is called.
dev.epicgames.com
'게임개발 > Unreal Engine' 카테고리의 다른 글
| [UE5] Unreal Object Pointers (0) | 2026.05.26 |
|---|---|
| [UE5] FName, FText, FString (0) | 2026.03.28 |
| [UE5] 언리얼의 Multi-threading (0) | 2026.02.16 |
| [UE5] Replicate Montage Multicast in C++ not working (0) | 2025.03.01 |
| [UE5] C++ AActor::Destroy() not working in BeginPlay() (0) | 2025.02.06 |