UE4 C++利用反射调用纯蓝图函数

对于纯蓝图定义的函数或者UFUNCTION可以使用函数

UObject中的

	virtual void ProcessEvent( UFunction* Function, void* Parameters )

进行调用

比如蓝图终定义了BP_Func()

可在C++代码中这样调用:

ProcessEvent(FindFunctionChecked(FName("BP_Func"),NULL);

第二个参数为函数参数,无参数直接设为NULL。

对于有参数的情况则比较麻烦一点,需要在反射文件gen文中找到对应反射变量。

如UFUNCTION标记的函数使用实例:

函数 void APlayerController::ClimpClimp(APlayerCharacter* playerJL)


调用:

PlayerController_eventClimpClimp_Parms Parms;
Parms.playerJL=playerJL;
ProcessEvent(FindFunctionChecked(NAME_APlayerController_ClimpClimp),&Parms);

PlayerController_eventClimpClimp_Parms是在对应类的反射文件gen.h对函数ClimpClimp(APlayerCharacter*playerJL)中参数反射生成的一个结构体

struct PlayerController_eventClimpClimp_Parms \
	{ \
		APlayerCharacter* playerJL; \
	}; \

对有参函数,声明定义,初始化该结构体后,将参数Parms传入ProcessEvent进行调用。

另有人宅大大的文章:https://zhuanlan.zhihu.com/p/103710092 算是对ProcessEvent函数深入剖析

你可能感兴趣的:(UE4学习,UE4,c++,调用,蓝图函数,反射)