Appearance
事件
事件基本与多播类似,但额外提供了操作限定。如,禁止在声明事件对象的外部调用事件传播、清理、检查等函数。
实现事件方法限制的内核是友元。但4.21版本时广播方法是公共的,实际上没有限制作用。
构建
事件的构建,需要提供声明所在类型,且需要在类内部进行声明。
事件没有返回值。
OwningType即当前声明事件的类。
一般构架语法如下:将事件声明在类的内部,通过函数构建返回事件对象操作
cpp
public:
// 如下AMyActor便是持有事件的类名
DECLARE_EVENT(AMyActor, FChangeEvent)
FChangeEvent& OnChanged() {return ChangeEvent;}
private:
FChangeEvent ChangeEvent;
例子
cpp
public:
DECLARE_EVENT(AMyActor, CBEvent) // 声明事件类型
CBEvent NotifyEvent; // 构建事件对象
void CallBackFun(); // MyActor类中
// cpp里调用
// 两个对象
AMyActor* my1 = GetWorld()->SpawnActor<AMyActor>(AMyActor::StaticClass());
AMyActor* my2 = GetWorld()->SpawnActor<AMyActor>(AMyActor::StaticClass());
// 绑定事件
NotifyEvent.AddUObject(my1, &AMyActor::CallBackFun); // 用AddUObject去添加到序列中
FDelegateHandle handle = NotifyEvent.AddUObject(my2, &AMyActor::CallBackFun);
NotifyEvent.Broadcast();
// NotifyEvent.Remove(); // 移除事件绑定
// NotifyEvent.Remove(handle); // 可以带参