c++中获取蓝图组件_通过UE4C++反射调用UE4蓝图函数

本文详细介绍了如何在UE4 C++中通过反射调用来调用任意的UE4蓝图函数。提供了模板函数`ImplementFunction`和`Call`的实现代码,展示了在`BeginPlay`中直接调用蓝图函数的例子。还探讨了蓝图如何调用C++函数的可能性,提到了官方提供的几种方法,并提出通过蓝图AddPin和定义函数协议的思路。
摘要由CSDN通过智能技术生成

大家好,这节我们来讲解一下如何通过UE4C++调用任意的UE4蓝图函数。

其实用法很简单。

首先在蓝图里面建立如下的函数,我这边是在GameMode里面建立的:

然后我们在我们的CPP里面加入如下代码:

下面的代码中用到了元祖,如果不了解UE4元祖可以查看以下文章人宅:UE4 TTuple 使用技巧​zhuanlan.zhihu.com42c7d1b63c212800890e4c6020991b6a.png

粘贴如下代码:

template

void ImplementFunction(UClass* OuterClass, UFunction* Function, TTuple& OutParams, TArgs&&... Args)

{

void* FuncPramsStructAddr = (uint8*)FMemory_Alloca(Function->ParmsSize);

uint8* OutPramsByte = (uint8*)&OutParams;

TTuple InParams(Forward(Args)...);

uint8* InPramsByte = (uint8*)&InParams;

if (Function->HasAnyFunctionFlags(FUNC_Native))

{

FFrame Frame(nullptr, Function, &FuncPramsStructAddr, nullptr, Function->Children);

uint8* ReturnParams = nullptr;

//执行无字节码的函数

//注册虚拟机参数列表

FOutParmRec** LastOut = &Frame.OutParms;

for (TFieldIterator ParmIt(Function); ParmIt; ++ParmIt)

{

UProperty *Property = *ParmIt;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值