[UE5] 자식 클래스의 서브오브젝트 새로 생성하기

2026. 7. 14. 23:43·게임개발/Unreal Engine

언리얼에서 부모 클래스를 만들고, 이를 파생시킨 서브클래스를 만들 때 막혔던 부분이 있다.

 

그것은 부모 생성자에서 만든 오브젝트를 자식 클래스에서 새로 할당해줘야 할 때였다.

 

직관적으로 코드를 짰을 때는 아래와 같이 작성했다.

// 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
'게임개발/Unreal Engine' 카테고리의 다른 글
  • [UE5] Unreal Object Pointers
  • [UE5] FName, FText, FString
  • [UE5] 언리얼의 Multi-threading
  • [UE5] Replicate Montage Multicast in C++ not working
깜냥c
깜냥c
게임 개발/클라이언트/AI/PS/기타 연구
  • 깜냥c
    Choice Program
    깜냥c
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 언어 (12)
        • C,C++ (10)
        • C# (1)
        • Python (1)
      • PS (20)
        • 백준 문제 (19)
        • 알고리즘 (1)
      • 인공지능 (2)
      • 게임제작 (7)
      • 게임개발 (22)
        • Unity (11)
        • Unreal Engine (9)
        • Godot Engine (1)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 블로그 소개
  • 링크

    • 김병장의 IT 블로그
    • 식품영양과 데이터사이언스
  • 공지사항

  • 인기 글

  • 태그

    BOJ
    배낭 문제
    입출력
    C++
    Unreal
    C언어
    Godot
    백준
    unity
    UE5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
깜냥c
[UE5] 자식 클래스의 서브오브젝트 새로 생성하기
상단으로

티스토리툴바