事件排程器非常的適合在各個藍圖之間實現通訊功能。
當前ue4版本4.8.3。
在藍圖中,事件排程器的作用就像是事件的派發器。通過將事件預先的繫結在事件排程器上,可以讓系統可以在需要時將事件派發給所有已經繫結的事件。
乙個比較常見的使用事件排程器的地方,就是關卡藍圖。
關卡藍圖中的很多物體的actor及其邏輯,如果要脫離關卡藍圖的話會比較難於使用。因此,可以通過將關卡藍圖中實現好的功能繫結到某個類,例如gamemode的事件排程器上來方便排程。
如下圖,在關卡藍圖的beginplay中將功能繫結到gamemode上:
然後可以在gamemode的藍圖中,設定定時的排程關卡藍圖上的功能
事件排程器同時支援解綁和解綁全部,以方便對事件排程的邏輯進行進一步的控制。
在c++和藍圖混合使用時,使用blueprint function library可以方便的實現藍圖到c++的呼叫。如果要實現c++對藍圖的邏輯的話,事件排程機制就非常的方便。
在c++中,與事件排程器對應的是delegate機制。事實上,delegate機制的涵蓋範圍比事件排程器要大一些。
delegate機制是一種常見的設計模式,相信做程式的童鞋都比較熟悉。這裡不做多餘的說明了。
ue4官方對delegate的翻譯名稱唯**。按照型別,分為單播**和多播**。其中,多播**與事件排程器的功能類似,而單播**更接近單純的**,也就是只能繫結乙個執行函式。
要讓多播**像是事件排程器一樣使用的話,需要將其定義為dynamic。對於單播**也是一樣的。
在c++中使用ue4的**功能,需要使用官方提供的巨集進行定義。
函式簽名
宣告巨集void function()
declare_delegate( delegatename )
void function( )
declare_delegate_oneparam( delegatename, param1type )
void function( , )
declare_delegate_twoparams( delegatename, param1type, param2type )
void function( , , … )
declare_delegate_params( delegatename, param1type, param2type, … )
function()
declare_delegate_retval( retvaltype, delegatename )
function( )
declare_delegate_retval_oneparam( retvaltype, delegatename, param1type )
function( , )
declare_delegate_retval_twoparams( retvaltype, delegatename, param1type, param2type )
function( , , … )
declare_delegate_retval_params( retvaltype, delegatename, param1type, param2type, … )
針對不同的**型別,使用不同的巨集字首即可:
多播**
declare_multicast_delegate…
動態單播**
declare_dynamic_delegate…
動態多播**
declare_dynamic_multicast_delegate…
實際使用時,首先要對**型別進行定義
1
declare_dynamic_multicast_delegate_twoparams
(fdsplrvaldelegate
,float
,lvals
,float
,rvals);
然後在具體的類,例如gamestate中進行具體的宣告
1
2
uproperty
(blueprintassignable
,category
="soundfuncs"
)
fdsplrvaldelegate
dsplrvals
;
這樣一來,就可以在需要呼叫這個**的地方進行呼叫了,例如在某個資料生成的地方。
c++ 1
2
3
amygamestate
*br#cast
<
amygamestate
>
(sl_contex
.lc_cgamestate);if(
brdsplrvals
.broadcast
(tflval
,tfrval);
之後,就可以在藍圖中向這個多播**繫結事件來獲得生成的資料了
事件排程器的機制在邏輯實現中非常的方便,尤其是在關卡設計中,可能會比較經常用到。使用中也沒有遇到什麼特別需要注意的地方,邏輯很單純。
UE4中Taglib使用及外掛程式製作
2015年9月10日0 目錄 隱藏 ue4使用第三方庫時,為了方便跨平台編譯 避免衝突和多次復用,將其製作成外掛程式是不錯的選擇。當前ue4版本為4.10.1。taglib是乙個用於讀取多 檔案標籤的第三方庫,之所以會使用到,是因為當前fmod在讀取含有非英文的標籤會得到錯誤的結果。taglib需要...
UE4 定時器的使用
注意 getworldtimermanager 是在遊戲開始的時候執行的,需要在beginplay 中呼叫,在建構函式中會崩潰。1 在.件中定義定時器控制代碼timehandle 也就是定義乙個定時器手柄,用來接收定時器的控制 2 在.cpp檔案中 getworldtimermanager sett...
關於UE4中Log的使用
log的列印 藍圖中的log就是printstring這個節點,在這個節點中有乙個選項 print to log 只有勾選了或者選項,log資訊才能列印到資訊日誌中。log的檢視 首先應顯示出輸出日誌視窗 開啟路徑為 選單欄 視窗 開發者工具 輸出日誌 如何在輸出日誌中找到輸出資訊 藍圖中列印輸出的...