UE C++中获得蓝图函数返回值

UE 反射应用

方法一:

	UFunction* bpFunc = ik_actor->GetClass()->FindFunctionByName(FName("GetReturnValue"));
	if (!bpFunc)
	{
		return -1;
	}
	struct EventFunc_Params
	{
		FString Args;
		FString ReturnValue;
	} Func_Params;

	ik_actor->ProcessEvent(bpFunc, &Func_Params);

方法二:

	UFunction* bpFunc = ik_actor->GetClass()->FindFunctionByName(FName("GetReturnValue"));
	if (!bpFunc)
	{
		return -1;
	}

	FStrProperty* returnValue = nullptr;
	for (TFieldIterator<UProperty> propIt(bpFunc, EFieldIteratorFlags::ExcludeSuper); propIt; ++propIt)
	{
		UProperty* property = *propIt;
		bool isOut = property->HasAnyPropertyFlags(CPF_ReturnParm | CPF_OutParm);
		if (!isOut)
		{
			continue;
		}

		FStrProperty* strProperty = CastField<FStrProperty>(property);
		if (strProperty)
		{
			returnValue = strProperty;
		}
	}

	FStructOnScope funcParam(bpFunc);
	ik_actor->ProcessEvent(bpFunc, funcParam.GetStructMemory());

	if (returnValue != nullptr && IsValid(bpFunc))
	{		
		FString value = returnValue->GetPropertyValue_InContainer(funcParam.GetStructMemory());
		if (value.IsEmpty())
		{
			GEngine->AddOnScreenDebugMessage(9840, 10.0, FColor::Red, "Value is Empty!", false);
		}
		else
		{
			FString Text = "Value is: " + value;
			GEngine->AddOnScreenDebugMessage(9840, 10.0, FColor::Red, Text, false);
			UE_LOG(LogTemp, Warning, TEXT("%s"), *value);
			return 0;
		}
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值