[UE4]UFunction-ProcessEvent返回值与输出参数获取
keywords: [UE4]UFunction-ProcessEvent返回值与输出参数获取
调用UFunction
执行UFuncion,使用 ProcessEvent
:
UFunction* Fun = Actor->FindFunction(TEXT("TestFun"));
if(Fun)
{
Actor->ProcessEvent(Fun, Buffer);
}
查询UFunction信息
获取返回值:
UFunction* Fun = Actor->FindFunction(TEXT("TestFun"));
if(Fun)
{
FFrame frame = FFrame(Actor, Fun, Buffer, NULL, Fun->Children);
uint8* ReturnValueAdress = Buffer + Fun->ReturnValueOffset;
int* intp = (int*)ReturnValueAdress; //hardcoded exemple for a int return
Fun->Invoke(Actor, frame, intp);
}
获取输出参数:
if(UFunction* Fun = Actor->FindFunction(TEXT("TestFun")))
{
if(uint8* Buffer = (uint8*)FMemory_Alloca(Fun->ParmsSize))
{
for (TFieldIterator<UProperty> PropIt(Fun, EFieldIteratorFlags::ExcludeSuper); PropIt; ++PropIt)
{
UProperty* Property = *PropIt;
bool isOut = Property->HasAnyPropertyFlags(CPF_OutParm);
if (!isOut)
{
continue;
}
uint8* outValueAddr = Property->ContainerPtrToValuePtr<uint8>(Buffer);
float* floatp = (float*)outValueAddr; //hardcoded example for float
}
}
}
通过 FindFunction 查找的函数必须添加 UFUNCTION() 宏,否则 FindFunction 返回NULL。
参考自:
https://answers.unrealengine.com/questions/516440/ufunction-invoke.html
对的那条路,往往不是最好走的。