问题描述:在开发过程中,想在蓝图中使用函数名并传递相应的参数就能调用对象的函数。想要完成这个功能,要思考以下几个问题:
1、如何通过函数名调用函数
2、如何通过函数名调用函数,并传递参数
3、不同的函数有不同的参数,如何给函数传递参数,能自动适配形参类型。
问题解答:
1、如何通过函数名调用函数
这里的讨论排除了下面的两个函数:
这里使用UEC++提供的反射函数ProcessEvent
即可完成使用函数名调用函数
void UObject::ProcessEvent( UFunction* Function, void* Parms);
具体操作如下:
// .h
UFUNCTION(BlueprintCallable)
static void CallFunctionByNameNoParameters(UObject* Target, FName FuncName);
// .cpp
void UMyBlueprintFunctionLibrary::CallFunctionByNameNoParameters(UObject* Target, FName FuncName)
{
if(Target)
{
UFunction* Function = Target->GetClass()->FindFunctionByName(FuncName);
if (Function)
{
Target->ProcessEvent(Function, nullptr)
}
}
}
至此,一个可以通过传入对象,和其函数名就可以调用的蓝图节点完成了。
2、如何通过函数名调用函数,并传递参数
在这里又要分为两种情况讨论:
①传递指定的参数
②传递泛型参数
首先比较简单的就是传递指定参数,不多解释一笔带过
//.h
UFUNCTION(BlueprintCallable)
static void CallFunction_2_Params(UObject* Object,