您现在的位置是:首页 >技术交流 >UE5--浅析委托原理(Delegate)网站首页技术交流
UE5--浅析委托原理(Delegate)
简介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的代码
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结