Event模式概括的说分三部分:
1.全局唯一的Event对象本身,可以统一放置也可以分散在各个模块
2.注册侦听特定Event的回调
3.触发特定Event
UE4的Event是用MultcastDelegate实现,蓝图常用的有三种实现方式:
1.C++ + 蓝图:
//声明动态MulticastDelegate,否则蓝图无法识别
DECLARE_DYNAMIC_DELEGATE_OneParam(FEventOneParam, FString, Param1);
UPROPERTY() FMultiDelegateOneParam MultiDelegate;
UFUNCTION(BlueprintCallable) void RegisterEvent(UPARAM(DisplayName = "Event") FEventOneParam InEvent); UFUNCTION(BlueprintCallable) void TriggerEvent(FString InParam);
2.C++ + 蓝图:
DECLARE_DYNAMIC_DELEGATE_OneParam(FEventOneParam, FString, Param1);
//BlueprintAssignable会向蓝图暴露该Event,直接在蓝图逻辑层对该Event侦听或者触发
UPROPERTY(BlueprintAssignable) FMultiDelegateOneParam MultiDelegate;
3.纯蓝图(好处是可以热更新)
EventDispatcher