委托(Delegate):
类似广播
概念:
将函数或方法作为参数传递给其他函数或对象的机制。它允许您将一个函数指针或成员函数指针绑定到一个特定的对象,并在需要时调用该函数或方法,而无需知道具体的函数名或对象实例。
作用:
降低耦合,动态选择调用(实现回调机制和事件驱动编程),提高了代码的灵活性和重用性
是一种泛型但类型安全的方式,可在C++对象上调用成员函数,可使用委托动态(可以更改)绑定到任意对象的成员函数,尽量通过引用传递委托
声明:
(函数签名(函数的声明或定义中包含的信息)《--对应--》宏(委托签名)
UDELEGATE(说明符)和函数的说明符一致
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(委托名F……,param参数类型,参数名,……)4个参数的动态多播委托
Declare声明_dynamic_multicast_delegate_fourParams
使用:
声明:委托名 name;委托对象:
绑定/分配:(委托绑定到……)
委托对象.Bind……(this成员函数所属类,&myfunc(),payload载荷数据(参数)(携带的数据或者信息)……)绑定到现有委托对象。
BindSP()绑定基于指针的共享成员函数委托。
载荷数据:调用该委托时, 此类参数将被传到绑定函数
执行:(调用绑定到的函数)
委托对象.Execute(参数)执行绑定到委托的回调函数,不检查其绑定情况即执行一个委托
检查:.IsBound()是否绑定
类型
单播:只能绑定到一个函数上
多播:可以绑定多个函数,当委托触发时,将调用所有这些函数
动态:AddDynamic(this对象实例,&函数指针)绑定-》参数一致的函数上
动态多播:Broadcast(传入参数)执行
接口:
对于蓝图或c++彼此通信,而不用创建类实例,可以减少类之间的耦合,使得系统更模块化和灵活。
创建蓝图接口:
声明:创建一个蓝图继承接口,声明函数,
实现准备:在其他类实现函数点击上方的class setting,
inherited interfaces(是从父 类继 承下来的接口,我 们无法在当前类手动 添加,可以直接搜索节点定义)
implemented interfaces(在当前类中直接实现的接口,通过add添加)
实现接口:双击接口……进行定义Event(在蓝图的call可以找到谁定义了它,在节点 上有说明Target is || Difines event for the ……)
调用:
Interface Message(当发送一个接口消息时,所有Event实现了该接口的对象都 会 接收 到并可能做出响应。)
Call Function( 则是明确地调用特定对象中的特定函 数)区别
指定target:Target引脚允许你指定要在其上调用接口函数的具体对象
(仅针对message,::Target引脚的对象是一个包含多个对象的集合(如一个数组或 列 表),接 口消息 节点将会在这些对象中调用指定的接口函数。
·如果Target引脚连接的是一个单独的对象,那么只有这个对象上的接口函数会被调 用
为什么当前类没有接口实现,只有Interface Message接口调用 ,为什么 implemented i nterfaces 也显示接口类名:因为我们有手动添加接口类,只是没有双击接口定义
创建c++接口:
https://blog.csdn.net/qq_44160901/article/details/131772597
声明:继承UInterface,创建函数 public:UFUNCTION(BlueprintNativeEvent) void OnHit(bool Invulnerability);
定义:在其他类包含接口头文件,多重继承public I接口类名(一定注意I),
重写声明:Virtual 函数 _Implementation(一定要加,因为声明) ovrried
调用接口:获取继承接口的类,cast转化为接口类型指针,Execute_接口名(类指针,实参列表);