Thanks! This thread helped me a lot.
My code with inputs and return value:
FName UMATRemapLiveLink::GetRemappedCurveName(ULiveLinkRemapAsset* RemapAsset, const FName& InCurveName) const
{
UFunction* Func_GetRemappedCurveName = RemapAsset->GetClass()->FindFunctionByName(FName("GetRemappedCurveName"));
if (!Func_GetRemappedCurveName)
{
return NAME_None;
}
FStructOnScope FuncParam(Func_GetRemappedCurveName);
// Set input properties
FNameProperty* InProp = CastField<FNameProperty>(Func_GetRemappedCurveName->FindPropertyByName(TEXT("CurveName")));
if (!InProp)
{
return NAME_None;
}
InProp->SetPropertyValue_InContainer(FuncParam.GetStructMemory(), InCurveName);
// Call function
RemapAsset->ProcessEvent(Func_GetRemappedCurveName, FuncParam.GetStructMemory());
// Get return property
FNameProperty* OutProp = CastField<FNameProperty>(Func_GetRemappedCurveName->GetReturnProperty());
if (!OutProp)
{
return NAME_None;
}
return OutProp->GetPropertyValue_InContainer(FuncParam.GetStructMemory());
}