UE5利用ProcessEvent搭配CustomThunk实现函数名调用函数,并传递多个泛型参数

问题描述:在开发过程中,想在蓝图中使用函数名并传递相应的参数就能调用对象的函数。想要完成这个功能,要思考以下几个问题:

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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值