大家好,这节我们来讲解一下如何通过UE4C++调用任意的UE4蓝图函数。
其实用法很简单。
首先在蓝图里面建立如下的函数,我这边是在GameMode里面建立的:
然后我们在我们的CPP里面加入如下代码:
下面的代码中用到了元祖,如果不了解UE4元祖可以查看以下文章人宅:UE4 TTuple 使用技巧zhuanlan.zhihu.com
粘贴如下代码:
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;