반응형
1. StaticClass()
"클래스 그 자체의 정보(설계도)를 가져오는 함수"
C++에서는 클래스 이름(예: AMyActor)을 변수에 담거나 런타임에 직접 조작할 수 없습니다. 하지만 언리얼 엔진은 UClass라는 객체를 통해 클래스의 메타데이터(변수 목록, 함수 목록, 부모 클래스 등)를 관리합니다.
- 역할: 특정 클래스에 대응하는 UClass 타입의 포인터를 반환합니다.
- 특징: 정적(static) 함수이므로 인스턴스가 없어도 클래스이름::StaticClass() 형태로 호출할 수 있습니다.
- 사용 예시:
-
C++
// AMyActor 클래스의 정보를 가져옴 UClass* MyClassInfo = AMyActor::StaticClass(); // 특정 객체가 이 클래스 타입인지 확인할 때 if (SomeActor->GetClass() == AMyActor::StaticClass()) { ... }
2. TSubclassOf<T>
"특정 클래스를 상속받은 '클래스 유형'만 담는 안전한 주머니"
UClass*는 모든 언리얼 클래스 정보를 담을 수 있어 너무 광범위합니다. 반면 TSubclassOf는 템플릿을 사용해 특정 부모 클래스를 상속받은 클래스들만 선택할 수 있도록 제한합니다.
- 역할: 클래스 타입의 **유형 안전성(Type Safety)**을 보장합니다.
- 특징: * 에디터 연동: UPROPERTY로 선언하면 에디터 상세 창(Details)에서 지정한 클래스(T)와 그 자식 클래스들만 드롭다운 목록에 나타납니다.
- 런타임 안전: 엉뚱한 클래스가 할당되는 것을 컴파일 타임 혹은 런타임에 방지합니다.
- 사용 예시:
-
C++
// 에디터에서 AProjectile을 상속받은 블루프린트만 선택 가능하게 함 UPROPERTY(EditAnywhere, Category = "Combat") TSubclassOf<AProjectile> ProjectileClass; // 선택된 클래스 유형을 이용해 실제로 스폰함 GetWorld()->SpawnActor<AProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);
3. CDO (Class Default Object)
"모든 인스턴스의 모태가 되는 '기본 객체(원본)'"
언리얼 엔진은 엔진이 초기화될 때 각 UClass마다 단 하나의 인스턴스를 미리 생성해 둡니다. 이것이 바로 클래스 디폴트 오브젝트(CDO)입니다.
- 역할: 새로운 객체가 생성될 때 "기본값"을 복사해주는 템플릿(Master Copy) 역할을 합니다.
- 특징:
- 클래스의 생성자가 호출되어 속성값이 설정된 직후의 상태를 저장합니다.
- 객체를 수천 개 생성할 때 매번 복잡한 초기화 계산을 하는 대신, 메모리에 이미 있는 **CDO를 통째로 복사(Copy)**하여 성능을 최적화합니다.
- 런타임에 특정 클래스의 기본 공격력이나 기본 속도 같은 설정값만 확인하고 싶을 때 인스턴스를 스폰할 필요 없이 CDO를 조회하면 됩니다.
- 사용 예시:
-
C++
// 클래스 정보를 통해 CDO를 가져옴 AMyActor* DefaultActor = GetDefault<AMyActor>(); // 또는 UClass를 통해 가져옴 AMyActor* DefaultObj = MyClassInfo->GetDefaultObject<AMyActor>(); // 이 값은 게임 세상에 배치된 액터가 아니라, '원본 설계도에 적힌 기본값'입니다. float BaseHP = DefaultObj->Health;
요약 및 관계도
| 개념 | 비유 | 설명 |
| StaticClass | 설계도 정보 | 클래스가 어떤 변수와 함수를 가졌는지 기록된 메타데이터 |
| TSubclassOf | 설계도 보관함 | 특정 종류의 설계도들만 모아두는 바구니 (안전장치) |
| CDO | 전시용 샘플 | 설계도대로 딱 하나 미리 만들어둔 원본 샘플 (복제용) |
실제 흐름:
- StaticClass()로 클래스 정보를 찾습니다.
- 이 정보를 TSubclassOf 변수에 저장해둡니다.
- 새 객체를 만들 때, 엔진은 해당 클래스의 CDO를 찾아 그 내용을 그대로 복사해 새로운 인스턴스를 탄생시킵니다.
반응형
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
| Unreal Engine의 PrimaryAsset (0) | 2025.12.29 |
|---|---|
| PRAGMA_DISABLE_OPTIMIZATION과 PRAGMA_ENABLE_OPTIMIZATION 매크로 (0) | 2025.12.29 |
| 언리얼 엔진의 메인 스레드 구조 및 설계 철학 (1) | 2025.12.09 |
| [UE5] stat unit (2) | 2023.03.24 |
| [UE] Unreal Egnine 쿠킹 By the Book, On the Fly (0) | 2023.03.20 |