void UUserDefinedStructEditorData::RecreateDefaultInstance(FString* OutLog) { UStruct* ScriptStruct = GetOwnerStruct(); DefaultStructInstance.Recreate(ScriptStruct); uint8* StructData = DefaultStructInstance.GetStructMemory(); ensure(DefaultStructInstance.IsValid() && DefaultStructInstance.GetStruct() == ScriptStruct); if (DefaultStructInstance.IsValid() && StructData && ScriptStruct) { DefaultStructInstance.SetPackage(ScriptStruct->GetOutermost()); for (TFieldIterator<UProperty> It(ScriptStruct); It; ++It) { UProperty* Property = *It; if (Property) { auto VarDesc = VariablesDescriptions.FindByPredicate(FStructureEditorUtils::FFindByNameHelper<FStructVariableDescription>(Property->GetFName())); if (VarDesc && !VarDesc->CurrentDefaultValue.IsEmpty()) { if (!FBlueprintEditorUtils::PropertyValueFromString(Property, VarDesc->CurrentDefaultValue, StructData)) { const FString Message = FString::Printf(TEXT("Cannot parse value. Property: %s String: \"%s\" ") , (Property ? *Property->GetDisplayNameText().ToString() : TEXT("None")) , *VarDesc->CurrentDefaultValue); UE_LOG(LogClass, Warning, TEXT("UUserDefinedStructEditorData::RecreateDefaultInstance %s Struct: %s "), *Message, *GetPathNameSafe(ScriptStruct)); if (OutLog) { OutLog->Append(Message); } } } } } } }