// C++의 New로 동적할당하는 것과 달리 언리얼에서는 NewObject를 사용한다.
UStudent* Student = NewObject<UStudent>();
UTeacher* Teacher = NewObject<UTeacher>();
C++의 New로 동적할당하는 것과 달리 언리얼에서는 NewObject
를 사용한다.
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_InContainer
와 SetValue_InContainer
를 통해 get과 set 기능을 수행한다.
// 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를 넣어주었다.)