? 中文字幕亂倫视频,欧美一级特黄AAAA免费看,GOGO西西人体大尺寸大胆高清
聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽街道洪山路國際工業(yè)設(shè)計(jì)園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當(dāng)前位置:主頁 > 3D教程 > 圖文教程

UE4 C++實(shí)現(xiàn)Delegate Event實(shí)例(例子、example、sample)

來源: 52vr | 責(zé)任編輯:傳說的落葉 | 發(fā)布時(shí)間: 2019-06-11 08:32 | 瀏覽量:

[UE4] C++實(shí)現(xiàn)Delegate Event實(shí)例(例子、example、sample)

 

雖然官方doc上說Event的Binding方式跟Multi-Cast用法完全一樣,Multi-Cast論壇上也有很多例子,但是實(shí)際是不一樣。。而且論壇上找不到相關(guān)例子。后來看了下runtime/core的源碼,Event的binging方式如下(附上完整步驟):

 

1,先定義自定義Event,此例中我們定義在GameMode中,名字叫 MyInitEvent。例子中定義的是無參函數(shù),如果需要帶參數(shù),官方doc講的有

 
  1. UCLASS()  
  2. class MYPROJ_API AMyGameMode : public AGameMode  
  3. {  
  4.     GENERATED_BODY()  
  5.       
  6. public:  
  7.   
  8.     AHGameMode();  
  9.   
  10.     //定義Event  
  11.     DECLARE_EVENT(MyUObject, MyInitEvent)  
  12.       
  13.     //用于獲取Event引用的函數(shù),方便在GameMode之外執(zhí)行binding  
  14.     MyInitEvent& OnInitialize() { return InitEvent; }  
  15.       
  16. private:  
  17.     //Event實(shí)例化  
  18.     MyInitEvent InitEvent;  
  19.       
  20.     //Event的binding指針  
  21.     FDelegateHandle DHandle;  
  22. }  

 

2,執(zhí)行Binding。MyUObject::TestFun是需要被觸發(fā)的函數(shù),這里假設(shè)是一個(gè)普通的無參成員函數(shù):

 
  1. MyUObject* MyObj = NULL;    //這里假設(shè)創(chuàng)建MyUObject  
  2. if (MyObj)  
  3. {  
  4.     DHandle = MyGameMode->OnInitialize().AddUObject(MyObj, &MyUObject::TestFun);  
  5. }  

 

注:任何UObject的普通函數(shù)都可以被設(shè)置為Event的回調(diào)函數(shù),但如果函數(shù)是UFUNCTION,那么需要將AddUObject替換為AddUFunction。

 

3,觸發(fā)Event,這里假設(shè)在BeginPlay中觸發(fā):

 
  1. void AMyGameMode::BeginPlay()  
  2. {  
  3.     InitEvent.Broadcast();  
  4. }  

 

4,移除Event,比如之前bingding的event不想再觸發(fā)了:

 
  1. MyGameMode->OnInitialize().Remove(DHandle);  


相關(guān)文章
網(wǎng)友評論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

關(guān)閉

全部評論:0條

推薦
熱門