UE4 事件排程器及C 中的使用

2021-08-15 07:08:21 字數 2764 閱讀 1777

事件排程器非常的適合在各個藍圖之間實現通訊功能。

當前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的檢視 首先應顯示出輸出日誌視窗 開啟路徑為 選單欄 視窗 開發者工具 輸出日誌 如何在輸出日誌中找到輸出資訊 藍圖中列印輸出的...