UE4 C++實現(xiàn)Delegate Event實例(例子、example、sample)
雖然官方doc上說Event的Binding方式跟Multi-Cast用法完全一樣,Multi-Cast論壇上也有很多例子,但是實際是不一樣。。而且論壇上找不到相關例子。后來看了下runtime/core的源碼,Event的binging方式如下(附上完整步驟):
1,先定義自定義Event,此例中我們定義在GameMode中,名字叫 MyInitEvent。例子中定義的是無參函數(shù),如果需要帶參數(shù),官方doc講的有
- UCLASS()
- class MYPROJ_API AMyGameMode : public AGameMode
- {
- GENERATED_BODY()
- public:
- AHGameMode();
- //定義Event
- DECLARE_EVENT(MyUObject, MyInitEvent)
- //用于獲取Event引用的函數(shù),方便在GameMode之外執(zhí)行binding
- MyInitEvent& OnInitialize() { return InitEvent; }
- private:
- //Event實例化
- MyInitEvent InitEvent;
- //Event的binding指針
- FDelegateHandle DHandle;
- }
2,執(zhí)行Binding。MyUObject::TestFun是需要被觸發(fā)的函數(shù),這里假設是一個普通的無參成員函數(shù):
- MyUObject* MyObj = NULL; //這里假設創(chuàng)建MyUObject
- if (MyObj)
- {
- DHandle = MyGameMode->OnInitialize().AddUObject(MyObj, &MyUObject::TestFun);
- }
注:任何UObject的普通函數(shù)都可以被設置為Event的回調函數(shù),但如果函數(shù)是UFUNCTION,那么需要將AddUObject替換為AddUFunction。
3,觸發(fā)Event,這里假設在BeginPlay中觸發(fā):
- void AMyGameMode::BeginPlay()
- {
- InitEvent.Broadcast();
- }
4,移除Event,比如之前bingding的event不想再觸發(fā)了:
- MyGameMode->OnInitialize().Remove(DHandle);
-
分享到:
全部評論:0條