UE委托机制

委托的基本概念,并阐述几种常用委托的使用方式?

一、基本概念:Delegate,委托,又称代理,本质是一个特殊类的对象,它内部可以储存(一个或多个)函数指针、调用参数和返回值.委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系.委托的作用如同函数指针,但它更安全(支持编译期类型安全检查),并且更易于使用。
二、四种委托方式
(一)单播委托:绑定单个可调用对象,支持返回值。一对一
DECLARE_DELEGATE、DECLARE_DELEGATE_XParams、 DECLARE_DELEGATE_RetVal、DECLARE_DELEGATE_RetVal_XParams//X=1~9
创建:
绑定:
执行委托、触发相应的对象的函数:Excute()、ExcuteIfBound()
移除委托:UnBind()
判断委托是否绑定函数指针:IsBound()
特性:不支持反射和序列化,支持Payload参数,1:1
多播委托:可以绑定对个可调用对象,实质是维持了一个单播委托的数组(FDelegateBase数组),调用时一个个调用,没有返回值
DECLARE_MULTICAST_DELEGATE、DECLARE_MULTICAST_DELEGATE_XParams//X=1~9
添加代理
执行、触发函数:BroadCast()
移除函数指针Remove和RemoveAll。 Remove的参数为委托AddUObject返回的句柄FDelegateHandle
特性:不支持反射和序列化,无返回值,支持Payload参数。 1:n
事件:其实就是多播委托, 只是比多播委托多了个friend class OwningType;
DECLARE_EVENT、DECLARE_EVENT_XParams//X=1~9
特性:不支持反射和序列化,无返回值,支持Payload参数,1:n
动态委托:同样分为单播和多播,意义和上面一样. 只能绑定UFUNCTION, 支持序列化, 可在蓝图中使用, 可以有UPROPERTY修饰,上面三种都不可以.绑定时不需要函数指针,仅需要函数名称字符串即可。
动态(单播)委托
DECLARE_DYNAMIC_DELEGATE_XParams、DECLARE_DYNAMIC_DELEGATE_RetVal_*
BindUFunction()、IsBound()、Unbind()、Clear()、GetUObject()、BindDynamic()、Excute()
动态多播委托
DECLARE_DYNAMIC_MULTICAST_DELEGATE_XParams//X=1~9
IsAlreadyBound()、AddUniqueDynamic()、AddDynamic()、RemoveDynamic()、BroadCast()
特性:支持反射和序列化,可在蓝图中使用,不支持Payload参数
eg:Actor的鼠标点击OnBeginCursorOver、开始进入Actor碰撞范围OnActorBeginOverlap等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值