The problem is the way the FIND node was programmed.
You can get the value of the struct as a ref like this (FVariantType is a custom *BlueprintType *that I created for myself to store anything from like ints, floats, arrays, rotators, transforms, etc):
UFUNCTION(Category="Variables|Variant", BlueprintCallable, CustomThunk, meta=(NotBlueprintThreadSafe, CustomStructureParam="AnyType", DisplayName="Set Variant = <?>", CompactNodeTitle="SET<?>"))
static FVariantType VAR_SetVariantValue_ANY( UPARAM(Ref)FVariantType &Variant, UProperty* AnyType );
DECLARE_FUNCTION(execVAR_SetVariantValue_ANY) {
P_GET_OBJECT_REF_NO_PTR(FVariantType,Variant);
Stack.StepCompiledIn<UProperty>(NULL);
void* ValueAddr = Stack.MostRecentPropertyAddress;
UProperty* AnyProp = Cast<UProperty>(Stack.MostRecentProperty);
if (AnyProp==nullptr) {Stack.bArrayContextFailed=true; return;}
P_FINISH;
P_NATIVE_BEGIN;
*(FVariantType*)RESULT_PARAM=___SetVariantValue_ANY(Variant,AnyProp,ValueAddr);
P_NATIVE_END;
}
static FVariantType ___SetVariantValue_ANY(FVariantType &VAR, UProperty* ANYProp, const void* ValuePtr);
FVariantType UGenericLibrary::___SetVariantValue_ANY(FVariantType &VAR, UProperty* ANYProp, const void* ValuePtr) {
const bool IsInt = ANYProp->IsA(UIntProperty::StaticClass());
const bool IsFloat = ANYProp->IsA(UFloatProperty::StaticClass());
const bool IsString = ANYProp->IsA(UStrProperty::StaticClass());
//... etc
if (IsInt) {
UIntProperty* _Int = CastChecked<UIntProperty>(ANYProp);
if (ValuePtr) {VAR.SetValue(_Int->GetPropertyValue(ValuePtr));}
else {UE_LOG(LogTemp,Warning,TEXT("{ ___SetVariantValue_ANY }: Caller context should reference a target Wildcard.
Unable to set Variant VALUE!"));}
} else
if (IsFloat) {
UFloatProperty* _Float = CastChecked<UFloatProperty>(ANYProp);
if (ValuePtr) {VAR.SetValue(_Float->GetPropertyValue(ValuePtr));}
else {UE_LOG(LogTemp,Warning,TEXT("{ ___SetVariantValue_ANY }: Caller context should reference a target Wildcard.
Unable to set Variant VALUE!"));}
} // else etc etc...
}
[HR][/HR]
The key stuff you have to understand there is ***P_GET_OBJECT_REF_NO_PTR *** and the way ***(FVariantType)RESULT_PARAM= *** is declared inside the P_NATIVE_BEGIN body.
That is, FVariantType which is my custom struct then would be your own struct type that you want to modify.