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個參數
其實是一個名稱,一個型別對一個參數
像這樣,我就將寫在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傳出的參數型別個數規格一致才行喔
當敵人被生成的時候,我將生成新敵人的function bind到enemy死亡時broadcast廣播的delegate
EnemyDeadDelegate.Broadcast();
如此一來,當敵人死亡時,我就讓這個EnemyDeadDelegate發出廣播,之後,所有有綁定在這個delegate中的function都會被連動到要去執行。
像是我這裡bind到的this 這個AEnemySpawner物件自己的Spawn()
如果有傳參數的話,bind進去的function收的參數要和delegate傳出的參數型別個數規格一致才行喔
留言
張貼留言