1-6강 Unreal Reflection System#2

Ryan Ham·2024년 7월 8일
0

이득우 Unreal

목록 보기
16/23

언리얼 Object Reflection System의 활용 코드

언리얼의 동적 할당

// C++의 New로 동적할당하는 것과 달리 언리얼에서는 NewObject를 사용한다. 
UStudent* Student = NewObject<UStudent>();
UTeacher* Teacher = NewObject<UTeacher>();

C++의 New로 동적할당하는 것과 달리 언리얼에서는 NewObject를 사용한다.


언리얼 Reflection System을 사용한 get과 set

FString CurrentTeacherName;
FString NewTeacherName(TEXT("Ryan"));
FProperty* Nameprop = UTeacher::StaticClass()->FindPropertyByName(TEXT("Name"));
if(NameProp)
{
	// get 기능 구현
	NameProp->GetValue_InContainer(Teacher, &CurrentTeacherName);
	UE_LOG(LogTemp, Log, TEXT("Current teacher name is %s"), *CurrentTeacherName);

	// set 기능 구현
	NameProp->SetValue_InContainer(Teacher, &NewTeacherName);
	UE_LOG(LogTemp, Log, TEXT("New teacher name is %s"), *Teacher->GetName());
}

Step1 : StaticClass()로 클래스 정보를 얻어오고(compile-time에서 클래스 정보를 얻는 방법이지만 여기서는 큰 의미 X) FindPropertyByName을 통해 특정 변수에 접근.

Step2 : 위에서 구한 FProperty의 주소값을 가지는 변수의 method 중 GetValue_InContainerSetValue_InContainer를 통해 get과 set 기능을 수행한다.


언리얼 Reflection System을 사용한 함수 호출

// Custom 함수인 DoLessonFunc는 UFUNCTION으로 선언된 함수 
UFunction* DoLessonFunc = Teacher->GetClass()->FindFunctionByName(TEXT("DoLesson"));
if(DoLessonFunc)
{
	Teacher->ProcessEvent(DoLessonFunc, nullptr);
}

Step 1 : GetClass()로 클래스 정보를 얻어오고(runtime에서 클래스 정보를 얻는 방법이지만 마찬가지로 여기서는 큰 의미 X)
Step 2 : 위에서 구한 UFunction의 주소값을 가지는 변수의 method 중 ProcessEvent을 통해 함수 실행(custom하게 만든 DoLessonFunc은 인자가 없기 때문에 ProcessEvent의 두번째 인자에는 nullptr를 넣어주었다.)


최종 정리

언리얼 reflection system의 활용

  • 언리얼 reflection system을 사용하면 특정 속성과 함수를 이름으로 검색해서 가져올 수 있다.
  • 언리얼 reflection system을 사용하면 접근 지시자와 무관하게 값을 설정할 수 있다.
  • 언리얼 reflection system을 사용하면 언리얼 오브젝트의 함수를 호출할 수 있다.
profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글