5. 언리얼 오브젝트 리플렉션 시스템I

TechN0·2025년 3월 10일
	UE_LOG(LogTemp, Log, TEXT("========================="));

	UClass* ClassRuntime = GetClass(); //UMyGameInstance 클래스 정보를 런타임에서 얻어옴
	UClass* ClassCompile = UMyGameInstance::StaticClass(); // 해당 클래스 정보 얻어오는 다른 방법 위와 동일한 객체 가르킴

	//check(ClassRuntime == ClassCompile);
	// 체크 통과하면 바로 아래의 로그를 출력 하지만 체크는 실패 발생시 에디터가 꺼지고 에러 출력

	//ensure(ClassRuntime != ClassCompile);
	// ensure는 에디터 안끄고 문제점 확인 가능

	ensureMsgf(ClassRuntime != ClassCompile, TEXT("에러 발생 시킨 코드"));
	//ensureMsgf는 메시지 출력 가능

	UE_LOG(LogTemp, Log, TEXT("학교 담당 클래스 이름 : %s"), *ClassRuntime->GetName());

	UE_LOG(LogTemp, Log, TEXT("========================="));


CDO(ClassDefaultObject)

기본값을 지정하지 않으면 빈 문자열

기본값을 지정하고 싶음 생성자 코드에 지정하면 된다.

이부분

UMyGameInstance::UMyGameInstance()
{
	// 롸잇 히어ㄹ
	MyNamel = TEXT("기본값");
}

근데 아래에서 이 변수를 MyNamel 을 바꾸면 기본값은 없어지나?

void UMyGameInstance::Init()
{
	MyNamel = TEXT("바밤바");
}

정답은 NOPE.

기본값은 CDO라고 하는 템플릿 객체에 저장됨

UMyGameInstance::UMyGameInstance()
{
	MyNamel = TEXT("기본값");
}

void UMyGameInstance::Init()
{
	Super::Init();
	MyNamel = TEXT("바밤바");
	
	MyNamel= TEXT("벼볌벼");
	
	UE_LOG(LogTemp, Log, TEXT("이름 : %s"), *MyNamel); // 바밤바 출력됨

	UE_LOG(LogTemp, Log, TEXT("이름 기본 값 : %s"), *GetClass()->GetDefaultObject<UMyGameInstance>()->MyNamel);
	// 기본값인 벼볌벼출...이 될까?
	
}

하지만 기본값은 출력이 안됨

왜냐하면

CDO(기본값)를 고치는 생성자 코드 수정시 헤터파일 수정과 같이 에디터를 끄고 컴파일 해야 함

CDO와 UClass 정보는 엔진이 초기되 되는 과정에서 정보가 만들어지기 때문

0개의 댓글