我知道delegates相当于dispatchers。但是事件声明有这么多种不同的类型。使用UFUNCTION宏可以使用BlueprintNativeEvents和BlueprintImplementableEvent定义事件。但是还有DECLARE_EVENT宏。我喜欢胡思乱想,谁能解释一下调度器、事件和各种类型的事件之间的区别?派遣器是观察者模式中的观察者,事件是那些观察者模式中的观察者吗?
当你使用UFUNCTIONs BlueprintNativeEvent和BlueprintImplementableEvent时--意味着这个函数可以被一个蓝图覆盖。然后,你可以从c++中启动一个蓝图函数。
然后--有几种类型的委托。
DECLARE_DELEGATE - 仅限C++,标准委托,只有一个函数可以绑定到它。
DECLARE_MULTICAST_DELEGATE,标准委托,只能绑定一个函数。 - 仅仅是C++中的标准委托,但多个函数可以绑定到它上,并使用Broadcast函数同时调用。
DECLARE_EVENT - 仅限C++。就像一个多播委托,但只有这个事件的所有者可以调用Broadcast。
DECLARE_DYNAMIC_MULTICAST_DELEGATE(动态多播委托) - C++BP。它就像一个多播委托,但它是可序列化的,当你在UPROPERTY中使用BlueprintAssignable关键字时,可以从蓝图中绑定。
我想,Event Dispatcher是DYNAMIC_MULTICAST_DELEGATE的BP唯一等价物。你可以将多个事件绑定到它上面,然后一次广播。