当前位置: 首页 > news >正文

UE5--浅析委托原理(Delegate)

委托概述

委托是一种用于事件处理的机制。通过使用委托,可以将一个或多个函数绑定到一个事件上,在事件触发时自动调用这些函数。代理也叫做委托,比如:跳,跑,开枪,伤害等响应,就是注册一个委托回调,其作用就是提供一种消息机制,都知道消息的传递需要发送方和接收方,而代理的过程也可分为这两大部分,我们可以换个名字分别叫做:触发点和执行点,这就是代理的主要部分,记住这个两个点就能记住代理原理。这里面也有很多的类型擦除,类型还原,还有函数签名转换。

委托种类

在这里插入图片描述

委托的使用

三个步骤:

1.声明委托代理

2.绑定函数到代理上

3.代理的调用

单播

DECLARE_DELEGATE( FSimpleDelegate ); // 无参、无返回值
DECLARE_DELEGATE_OneParam(FPakEncryptionKeyDelegate, uint8[32]); // 1个参数、无返回值
DECLARE_DELEGATE_TwoParams(FPakSigningKeysDelegate, TArray<uint8>&, TArray<uint8>&); // 2个参数、无返回值
DECLARE_DELEGATE_RetVal_ThreeParams(bool, FOnMountPak, const FString&, int32, IPlatformFile::FDirectoryVisitor*); // 3个参数、bool返回

声明定义单播可以有参数和无参数

单播代理委托,指的是只能绑定一个函数指针的委托,实现一对一的通知。

单播调用方式为 ExecuteIfBound()

单播删除方式为 Unbind()

单播绑定方法为 Bind…(如 BindStatic,BindRaw,BindUObject等)

多播

//多播委托
DECLARE_MULTICAST_DELEGATE(DelegateName);
DECLARE_MULTICAST_DELEGATE_ONEPARAM(DelegateName, Param1Type);
DECLARE_MULTICAST_DELEGATE_XXXPARAMS(DelegateName, Param1Type,...);

多播代理委托,指的是能绑定多个函数指针的委托,实现一对多的通知。

多播调用方式为 BroadCast()

多播的删除方式为 Remove(),RemoveAll()

多播绑定方式为 Add…(如 AddUObject…);

注意

1.只要动态多播才可以被蓝图绑定,通过宏定义BlueprintAsignable

2.看是否有返回值,通过关键字“RetVal”,只有单播委托和动态单播委托,才有返回值。

3.多播委托和单播委托都支持多参数传入,最多9个参数

4.委托的开头必须用F,否则无法编译

5.动态委托可以序列化,通过名称查找函数。

动态委托案例

下面是我用来学习动态委托的一个小案例,让自己更清楚的看见委托的使用与过程

新建两个C++对象
在这里插入图片描述
然后拖入场景,一下是两个Actor的代码


http://www.mrgr.cn/news/90302.html

相关文章:

  • 【c++】四种类型转换形式
  • PyQt学习记录
  • Git安全回退历史版本
  • Vue3 特点
  • 相似性图相关性重构网络用于无监督跨模态哈希
  • vue3+websocket+springboot、websocket消息通讯
  • JMeter通过BeanShell创建CSV文件
  • 【CXX-Qt】1.1 Rust中的QObjects
  • 驱动开发系列36 - Linux Graphics 2D 绘制流程
  • 序列化/反序列化与TCP通信协议
  • LLMs之DeepSeek-R1:TinyZero(复现 DeepSeek R1 Zero 的核心功能)的简介、安装和使用方法、案例应用之详细攻略
  • GeekPad智慧屏编程控制
  • 【CXX-Qt】1 CXX-Qt入门
  • Tcp_socket
  • DeepSeek 助力 Vue 开发:打造丝滑的步骤条
  • redo和binlog区别
  • DeepSeek:全栈开发者视角下的AI革命者
  • Docker 部署 MongoDB | 国内阿里镜像
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • Vue07
  • bitcoinjs学习笔记0(预备知识)
  • learn torch 01
  • three.js快速入门学习笔记
  • 渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • 客户端渲染和服务端渲染
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译