UE4 C++ Delegate

參考過的文章: 
https://blog.csdn.net/netyeaxi/article/details/81673691
https://zhuanlan.zhihu.com/p/46358868
https://www.twblogs.net/a/5b7cd6ef2b71770a43dcd2b0

先介紹自己使用過的Delegate好了

  • 若是你的Delegate打算在C++中宣告與使用,且也能在BP中被綁定後續要執行的內容

那你的Delegate必須被宣告為「DECLARE_DYNAMIC_MULTICAST_DELEGATE」類性的delegate

且後續宣告delegate物件時需要加上 UPROPERTY(BlueprintAssignable)來告訴UE4這是可以在BP中被呼叫且塞入綁定內容的

自己寫過的範例:
宣告了一個FUpdateUI,可以傳兩個參數 的 這樣一個類型的Delegate
這邊的兩個參數是 
float Score;
float Health;
兩個,因為UE4 C++的delegate要求所以看起來是一個delegate名稱+4個參數
其實是一個名稱,一個型別對一個參數

接著,我宣告使用FUpdateUI這個類型的Delegate 「UpdatePlayerUIDelegate」,並且他是可以在UE4 BP中被bind要執行的function的



像這樣,我就將寫在PlayerController中的Delegate 「UpdatePlayerUIDelegate」他一旦被broadcast的時候要執行的事情寫在BP,用BP拉好了要執行的行為。

  • 若是不需要在BP中被呼叫使用到,可以宣告到DECLARE_MULTICAST_DELEGATE()類型的delegate即可

宣告了一個不傳任何參數,只在C++內使用的delegate FonEnemyDead類型Delegate

宣告使用這個類型的Delegate 「EnemyDeadDelegate

在生成新敵人的時候,我將一個function bind綁定進去了敵人的物件中
當敵人被生成的時候,我將生成新敵人的function bind到enemy死亡時broadcast廣播的delegate

EnemyDeadDelegate.Broadcast();

如此一來,當敵人死亡時,我就讓這個EnemyDeadDelegate發出廣播,之後,所有有綁定在這個delegate中的function都會被連動到要去執行。
像是我這裡bind到的this 這個AEnemySpawner物件自己的Spawn()



如果有傳參數的話,bind進去的function收的參數要和delegate傳出的參數型別個數規格一致才行喔

留言

這個網誌中的熱門文章

UE4 tutorial : Blueprints 筆記

UE4 tutorial : Materials 筆記

UE4 tutorial : Getting Started