You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向C++调用的Blueprint函数传递参数

UE C++调用蓝图函数的参数填充实现方案

你要填充FuncParam的参数,本质是拿到每个参数对应属性在参数内存块中的地址,把你要传递的值写入对应地址即可,以下是具体实现:

核心填充代码

替换//FillParam here处的逻辑为如下内容即可,示例假设你需要调用的蓝图函数有两个参数:int32 数值参数、FString 字符串参数:

// 获得当前参数在FuncParam内存块中的实际地址
void* ParamAddress = Prop->ContainerPtrToValuePtr<void>(FuncParam.GetStructMemory());

// 按参数名匹配赋值,也可按参数顺序判断,按名匹配稳定性更高
if (Prop->GetFName() == FName("数值参数"))
{
    // 写入int32类型的参数值,示例值为2048
    *static_cast<int32*>(ParamAddress) = 2048;
}
else if (Prop->GetFName() == FName("字符串参数"))
{
    // 写入FString类型的参数值,示例值为"测试参数"
    *static_cast<FString*>(ParamAddress) = TEXT("测试参数");
}

常见参数类型的赋值示例

不同类型的参数只需修改强转的目标类型即可,常见类型的赋值写法参考:

  • bool类型:*static_cast<bool*>(ParamAddress) = true;
  • float类型:*static_cast<float*>(ParamAddress) = 3.1415f;
  • UObject派生类(比如AActor、UUserWidget):*static_cast<AActor*>(ParamAddress) = 你要传递的Actor指针;
  • FVector类型:*static_cast<FVector*>(ParamAddress) = FVector(100,200,300);

注意事项

  • 参数名必须和蓝图函数中定义的参数名完全一致,大小写敏感,否则会匹配失败
  • C++传递的类型必须和蓝图参数类型严格对应,类型不匹配会触发内存错误或者值异常
  • 如果是蓝图的输出参数(Out标记)或者引用参数,调用完ProcessEvent之后还可以从ParamAddress中读回蓝图修改后的结果
  • 如果你需要封装通用的调用工具,可以提前把要传递的参数按名或者按顺序存入容器,遍历的时候逐个匹配赋值即可

内容的提问来源于stack exchange,提问作者VansFannel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 05:45:06