C++¿¡¼ ¼ø¼ö ºí·çÇÁ¸°Æ® º¯¼ö¸¦ ÀÐ¾î ¿À´Â ¹æ¹ý¿¡ ´ëÇؼ ¾Ë¾Æ º»´Ù. ¾ð¸®¾ó ¹öÀüÀº 4.24.3ÀÌ´Ù. ºí·çÇÁ¸°Æ®ÀÇ int º¯¼ö¸¦ °¡Á® ¿Ã°ÍÀÌ´Ù. ºí·çÇÁ¸°Æ®¿¡ ´ÙÀ½°ú °°ÀÌ º¯¼ö¸¦ Ãß°¡ ÇÏ¿´´Ù. º¯¼ö À̸§ : SplineID ŸÀÔ : ÀÎƼÀú LoadBluePrintTest : ºí·çÇÁ¸°Æ®¸¦ ·Îµù GetBluePrintVariable : ºí·çÇÁ¸°Æ® º¯¼öÀ̸§À» ¹®ÀÚ¿·Î ÁÖ°í °ªÀ» °¡Á® ¿Â´Ù. //ºí·çÇÁ¸°Æ®ÀÇ ÀÎƼÀú º¯¼ö¸¦ ¸®ÅÏÇÑ´Ù.
bool GetBluePrintVariable(UObject* Target, FString VariableName, int& OutValue) { UProperty* Prop = Target->GetClass()->FindPropertyByName(*VariableName); if (Prop->GetClass() == UIntProperty::StaticClass()) { void* ValueAddr = Prop->ContainerPtrToValuePtr<void>(Target); UIntProperty* objectProp = Cast<UIntProperty>(Prop); OutValue = (int)objectProp->GetSignedIntPropertyValue(ValueAddr); //casting: int64 --> int //FString ValueStr = objectProp->GetNumericPropertyValueToString(ValueAddr); //int Value = objectProp->GetPropertyValue_InContainer(ValueAddr); ÀÌ°Ç ÀÌ»óÇÑ°ªÀÌ ³ª¿È //UE_LOG(LogTemp, Log, TEXT("Have UObjectProperty: %s, %d!!!"), *(Target->GetName()), Value); return true; } return false; } //ºí·çÇÁ¸°Æ®¸¦ ·ÎµùÇؼ ºí·çÇÁ¸°Æ®ÀÇ USplineComponent ÄÄÆ÷³ÍÆ®¿¡ Á¢±ÙÇÑ´Ù. void ASplineTestGameModeBase::LoadBluePrintTest() { TArray<AActor*> ActorList; FName Path = TEXT("Blueprint'/Game/blueprint/Spline_BP.Spline_BP_C'"); UClass* GeneratedBP = Cast<UClass>(StaticLoadObject(UClass::StaticClass(), NULL, *Path.ToString())); UGameplayStatics::GetAllActorsOfClass(GetWorld(), GeneratedBP, ActorList); for (int n = 0; n < ActorList.Num(); ++n) { AActor* Actor = ActorList[n]; USplineComponent* SplineComponent = Actor->FindComponentByClass<USplineComponent>(); if (SplineComponent) { int OutValue = 0; if(GetBluePrintVariable(Actor, TEXT("SplineID"), OutValue)) UE_LOG(LogTemp, Log, TEXT("Have SplineComponent!!!")); } } } |