UE4C++Delegate的使用

UE4C++Delegate的使用

一.单播代理

主要分为无参数的单播代理,有参数的单播代理和带返回值的单播代理。

1.声明:

在这里插入图片描述

2.定义:

在这里插入图片描述

3.使用:

首先定义需要绑定的方法:
在这里插入图片描述
以带一个参数的代理OneParam和无参数的代理NoParam为例,首先在类里创建两个函数用于绑定,参数要与代理对应。

然后与代理进行绑定,ue4提供了多种不同的方式:

(1)BindUObject:

绑定
参数一:需要绑定的对象,这里直接用的this,也可以根据情况绑定在玩家上等等。
参数二:绑定的方法,传递一个函数指针。

(2)BindLambda:

在这里插入图片描述

lambda表达式的说明:
之前绑定了OneParam和无参数的代理NoParam,这里绑定带返回值的代理ReTwoParam。
[]:表示捕获的值,因为是匿名函数无法使用外部的参数,所以需要用[]捕获才可以使用,案例中以直传递的方式捕获了a,也可以传递引用,指针,this指针等,this指针表示可以使用类中所有的值:

空。没有任何函数对象参数。
=。函数体内可以使用 Lambda 所在范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是值传递方式(相
当于编译器自动为我们按值传递了所有局部变量)。
&。函数体内可以使用 Lambda 所在范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是引用传递方式
(相当于是编译器自动为我们按引用传递了所有局部变量)。
this。函数体内可以使用 Lambda 所在类中的成员变量。
a。将 a 按值进行传递。按值进行传递时,函数体内不能修改传递进来的 a 的拷贝,因为默认情况下函数是 const 的,要
修改传递进来的拷贝,可以添加 mutable 修饰符。
&a。将 a 按引用进行传递。
a,&b。将 a 按值传递,b 按引用进行传递。
=,&a,&b。除 a 和 b 按引用进行传递外,其他参数都按值进行传递。
&,a,b。除 a 和 b 按值进行传递外,其他参数都按引用进行传递。

():表示形参
mutable:如果使用值传递捕获,mutable允许修改,例如例子中a=44.如果没有mutable则无法修改a的值。
->***:表示返回值 ,这里是int32.

(3)BindRaw:

在这里插入图片描述
如果有需要还可以绑定原声c++类
参数一:需要绑定的对象。
参数二:绑定的方法,传递一个函数指针。

(4)BindSP & BindThreadSafeSP:

在这里插入图片描述
绑定共享指针,参数同上。

(5)BindSP & BindThreadSafeSP:

在这里插入图片描述

在这里插入图片描述
绑定静态函数,根据需要使用。

(6)BindUFunction:

在这里插入图片描述
参数一:需要绑定的对象。
参数二:绑定的函数名称。

这样我们就可以在需要的时候调用这些方法了,如子弹打到人掉血,ui血条显示等,执行的方式主要分为两种:
在这里插入图片描述
ExecuteIfBound:只适用于无参数的代理 ,例子中也就是NoParam
Execute:其他一般会用这个方法执行代理,执行之前检测是否有绑定。

执行结果:
在这里插入图片描述

二.多播代理

多播代理与单播的区别就是可以绑定多个事件,需要注意:没返回值 且绑定多个执行顺序不确定

1.声明:

在这里插入图片描述

2.定义:

在这里插入图片描述

3.使用:

多播定义绑定:
在这里插入图片描述
其实与单播相同,只是关键字变成了add,剩余参考单播代理绑定即可。

执行:
多播使用broadcast执行。在这里插入图片描述

三.动态代理

动态代理可以给蓝图使用,可以绑定蓝图的事件,调用。注意:动态代理需要以F开头,并且给与参数名字,如果是动态多播绑定的函数必须使用反射UFUNCTION,否则会报错。

1.声明:

在这里插入图片描述

2.定义:

在这里插入图片描述
这里使用了BlueprintAssignable,这样蓝图里的事件也可以绑定。

3.使用:

(1)蓝图绑定:

在这里插入图片描述
其中val就是声明动态多播时候定义的值。

(2)C++绑定:

在这里插入图片描述

单播使用BindUFunction绑定。
多播使用AddDynamic绑定,这样调用的话会同时调用蓝图和c++里的代理。

(3)调用:

在这里插入图片描述

方法同上。

执行结果:本例中动态多播绑定了两个事件都是仅仅打印字符:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值