UE进阶实例43(UE中的委托、事件、单组播)

本文详细介绍了Unreal Engine中7种不同的事件类型,包括单播、多播及其动态版本,以及带返回值的类型。重点讨论了动态多播事件,它是蓝图和C++中最为常用且功能全面的事件类型。其他如单播和UE事件在特定场景下也有应用,但使用频率较低。
摘要由CSDN通过智能技术生成

UE中总计有7总类型的事件,每种的用途和功能各异,具体(一个参数作为参考):
>>UE中的任意委托或事件遵循UE的反射机制,需要使用UFUNCTION()标记回调方法

#1.单播,只能1对1
API 源码:

/**
 * Declares a delegate that can only bind to one native function at a time
 *
 * @note: The last parameter is variadic and is used as the 'template args' for this delegate's classes (__VA_ARGS__)
 * @note: To avoid issues with macro expansion breaking code navigation, make sure the type/class name macro params are unique across all of these macros
 */
#define FUNC_DECLARE_DELEGATE( DelegateName, ReturnType, ... ) \
	typedef TDelegate<ReturnType(__VA_ARGS__)> DelegateName;

定义语法:DECLARE_DELEGATE_OneParam
绑定函数:

DelegateOneParamFunc DefineDelegateOneParam;
DefineDelegateOneParam.BindSP()     // 绑定智能指针
DefineDelegateOneParam.BindLambda() // 绑定lambda
DefineDelegateOneParam.BindRaw()    // 绑定原生方法
DefineDelegateOneParam.BindStatic() // 绑定静态方法
DefineDelegateOneParam.BindUFunction() // 绑定到UObject中的方法
DefineDelegateOneParam.BindUObject()   // 绑定到UObject对象
DefineDelegateOneParam.BindWeakLambda()// 绑定到弱引用lambda

使用方法:

DefineDelegateOneParam.Execute()          // 执行
DefineDelegateOneParam.ExecuteIfBound()   // 执行(如果有绑定对象)

用途指数:🤍(基本没用)

#2. 多播或叫组播,1对多的关系,调用者可以广播,无界限调用,蓝图不可用
API 源码:

/** Declares a broadcast delegate that can bind to multiple native functions simultaneously */
#define FUNC_DECLARE_MULTICAST_DELEGATE( MulticastDelegateName, ReturnType, ... ) \
	typedef TMulticastDelegate<ReturnType(__VA_ARGS__)> MulticastDelegateName;

定义语法:DECLARE_MULTICAST_DELEGATE_OneParam(MultiDelegateOneParamFunc, int)
绑定函数:

MultiDelegateOneParamFunc DefineMultiDelegateOneParam;
DefineMultiDelegateOneParam.AddSP()    // 组播使用Add
DefineMultiDelegateOneParam.AddLambda()
DefineMultiDelegateOneParam.AddRaw()
DefineMultiDelegateOneParam.AddStatic()
DefineMultiDelegateOneParam.AddUFunction()
DefineMultiDelegateOneParam.AddUObject()
DefineMultiDelegateOneParam.AddWeakLambda()

使用方法:

DefineMultiDelegateOneParam.Broadcast(1)  // 广播出去

用途指数:💙🧡💛
点评:因为纯C++层的多播,蓝图端监听不到

#3. UE中的事件,可用于异步,1对多,主体广播
API 源码:

/**
 * Declares a multicast delegate that is meant to only be activated from OwningType
 *
 * @note: This behavior is not enforced and this type should be considered deprecated for new delegates, use normal multicast instead
 */
#define FUNC_DECLARE_EVENT( OwningType, EventName, ReturnType, ... ) \
	class EventName : public TMulticastDelegate<ReturnType(__VA_ARGS__)> \
	{
      \
		
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值