最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

UE5-藍(lán)圖通信 :接口/事件分發(fā)器/引用

2023-05-06 21:38 作者:bili_3493273303780263  | 我要投稿

開(kāi)篇先導(dǎo):

#1 為什么要用反射?

????#1.1?藍(lán)圖可編輯實(shí)例

????#1.2?序列化和反序列化

????#1.3?游戲狀態(tài)保存和恢復(fù)

#2 4類常見(jiàn)通信方式

#3? 藍(lán)圖接口 (BluePrint Interface)

#4 事件分發(fā)器(Event Dispatch)

#5?使用區(qū)別和注意事項(xiàng)


#1:為什么要用反射

圖片來(lái)自網(wǎng)絡(luò)隨機(jī)抓取

? ??當(dāng)我們?cè)谑褂?Unreal Engine 5(UE5)進(jìn)行游戲開(kāi)發(fā)時(shí),經(jīng)常需要在游戲運(yùn)行時(shí)處理大量的對(duì)象{object)以及他自個(gè)的屬性。這些對(duì)象和屬性可能來(lái)自于游戲場(chǎng)景的一個(gè)“box獎(jiǎng)勵(lì)箱”、角色(血量,buff)、物品(效果)等各種元素。在處理這些對(duì)象屬性時(shí),我們便需要使用到UE5為我們提供的反射機(jī)制。

藍(lán)圖接口,和事件分發(fā)器,這兩個(gè)功能,他們都離不開(kāi)UE的反射,沒(méi)有反射,這一切的一切都無(wú)法實(shí)現(xiàn)。他們都是基于這個(gè)地基之上的高樓。


反射是指在運(yùn)行時(shí)獲取一個(gè)對(duì)象的類型和屬性信息,然后使用這些信息來(lái)執(zhí)行操作。也就是,運(yùn)行時(shí)類型信息可用。

在 UE5 中,反射是通過(guò)使用 UClass、UObject 和 UProperty 等類來(lái)實(shí)現(xiàn)的。想了解最底層,可以去知乎看ue社區(qū)經(jīng)理,大釗的專欄。

下面說(shuō)下反射在 UE5?中的一些常見(jiàn)應(yīng)用場(chǎng)景。


1.1 藍(lán)圖可編輯實(shí)例(Instance Editable)

? ?藍(lán)圖可編輯(Instance Editable)實(shí)例,允許開(kāi)發(fā)者(你)在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建和編輯類的實(shí)例。在創(chuàng)建實(shí)例時(shí),UE5反射系統(tǒng)會(huì)使用元數(shù)據(jù)來(lái)初始化實(shí)例的屬性。開(kāi)發(fā)者可以使用 細(xì)節(jié)(Details) 面板來(lái)編輯類的屬性,并使用 事件面板圖表(就是藍(lán)圖編輯器界面)來(lái)定義類的行為。這樣,開(kāi)發(fā)者就可以通過(guò)藍(lán)圖來(lái)創(chuàng)建和編輯對(duì)象,而不需要編寫 C++ 代碼。

?1.2 序列化和反序列化

????序列化是指將對(duì)象轉(zhuǎn)換為一系列二進(jìn)制數(shù)據(jù)(因?yàn)閏pu只認(rèn)二進(jìn)制)的過(guò)程,而反序列化是指將這些二進(jìn)制數(shù)據(jù)轉(zhuǎn)換回對(duì)象的過(guò)程。在序列化和反序列化過(guò)程中,反射可以幫助我們動(dòng)態(tài)地獲取對(duì)象的屬性信息,并將其轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)或者將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換回對(duì)象。

1.3 游戲狀態(tài)保存和恢復(fù)

????在游戲運(yùn)行的時(shí)候,有時(shí)候我們需要保存和恢復(fù)游戲的狀態(tài)(存檔讀檔)。這個(gè)時(shí)候反射也可以派上用場(chǎng)。我們可以使用反射來(lái)獲取游戲對(duì)象屬性值,并將其保存為一系列數(shù)據(jù)。當(dāng)需要恢復(fù)游戲狀態(tài)時(shí),我們可以使用這些數(shù)據(jù)來(lái)重新創(chuàng)建游戲?qū)ο?,并將其屬性值設(shè)置為之前保存的值。

1.4 具體來(lái)說(shuō)

????藍(lán)圖可編輯實(shí)例使用了 UE5 的這套反射系統(tǒng),通過(guò)對(duì)對(duì)象屬性進(jìn)行元數(shù)據(jù)標(biāo)注,在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建類的實(shí)例。反射系統(tǒng)會(huì)讀取類的元數(shù)據(jù),包括屬性名稱、類型、默認(rèn)值等信息,然后將其用于創(chuàng)建實(shí)例。

在創(chuàng)建實(shí)例時(shí),反射系統(tǒng)會(huì)使用元數(shù)據(jù)來(lái)初始化實(shí)例的屬性。

#2? 4類常見(jiàn)通信方式


2.1 直接通信 對(duì)象引用

可以藍(lán)圖里動(dòng)態(tài)設(shè)置,也可以編輯器手動(dòng)設(shè)置引用actor

2.2 類型轉(zhuǎn)換


2.3 藍(lán)圖接口(Blueprint Interface)

一個(gè)接口,多個(gè)實(shí)現(xiàn)

2.4?事件分發(fā)器(EventDispatcher)


還有一個(gè)是關(guān)卡藍(lán)圖,獲取對(duì)象引用來(lái)控制actor,一般不常用。


來(lái)自官方文檔https://docs.unrealengine.com/5.0/zh-CN/actor-communication-in-unreal-engine/


#3? 藍(lán)圖接口 (BluePrint Interface)

圖片來(lái)自互聯(lián)網(wǎng)隨機(jī)抓取

在UE5中藍(lán)圖接口和事件分發(fā)器。

????是咱們常用的兩種藍(lán)圖通信機(jī)制,它們都可以用于不同藍(lán)圖之間的通信(比如開(kāi)關(guān)button對(duì)象和燈泡(light)對(duì)象,進(jìn)行通信)。

本文我們將介紹藍(lán)圖接口和事件分發(fā)器的使用區(qū)別、注意事項(xiàng)和使用場(chǎng)景。

來(lái)源可以去看我的ue5 官方content 藍(lán)圖通信系類視頻
  1. 1 使用方法:


    藍(lán)圖接口可以在一個(gè)藍(lán)圖中定義一個(gè)接口方法,并在其他藍(lán)圖中實(shí)現(xiàn)該接口方法。使用藍(lán)圖接口,需要注意以下幾點(diǎn):

① 接口方法必須在接口中定義,并且必須有輸入和輸出參數(shù)。

② 接口必須在藍(lán)圖中被實(shí)現(xiàn),否則在調(diào)用該接口時(shí)會(huì)拋出錯(cuò)誤。

在UE5版本中,你只需要完成1和2步驟,ue就會(huì)自動(dòng)幫你進(jìn)行一個(gè)空實(shí)現(xiàn),然后你在雙擊你的接口函數(shù),對(duì)他進(jìn)行操作

③ 一個(gè)藍(lán)圖可以實(shí)現(xiàn)多個(gè)接口,也可以實(shí)現(xiàn)同一個(gè)接口的多個(gè)版本。

④ 藍(lán)圖接口只能在藍(lán)圖之間傳遞數(shù)據(jù)和消息,不能直接調(diào)用函數(shù)或方法。

  1. 使用場(chǎng)景

藍(lán)圖接口通常用于以下場(chǎng)景:

① 當(dāng)多個(gè)藍(lán)圖需要共享相同的邏輯或數(shù)據(jù)時(shí),可以通過(guò)定義一個(gè)藍(lán)圖接口,在多個(gè)藍(lán)圖中實(shí)現(xiàn)該接口,從而實(shí)現(xiàn)數(shù)據(jù)或消息的共享。

② 當(dāng)需要修改或擴(kuò)展一個(gè)藍(lán)圖的功能時(shí),可以通過(guò)定義一個(gè)新的接口,并在原有藍(lán)圖中實(shí)現(xiàn)該接口,從而實(shí)現(xiàn)功能的擴(kuò)展。

注意事項(xiàng):

  1. 藍(lán)圖接口只能在藍(lán)圖內(nèi)部使用,不能被C++代碼調(diào)用。

  2. 如果一個(gè)藍(lán)圖實(shí)現(xiàn)了一個(gè)藍(lán)圖接口,但沒(méi)有實(shí)現(xiàn)接口中定義的所有函數(shù),那么在編譯時(shí)會(huì)產(chǎn)生警告。

  3. 如果多個(gè)藍(lán)圖實(shí)現(xiàn)了同一個(gè)藍(lán)圖接口,那么在使用接口時(shí)需要注意具體調(diào)用哪個(gè)實(shí)現(xiàn)。


#4 事件分發(fā)器(Event Dispatch)

在這種方法中,負(fù)責(zé)發(fā)送事件的Actor需要?jiǎng)?chuàng)建一個(gè)?事件分發(fā)器(Event Dispatcher)

所有監(jiān)聽(tīng)該事件的Actor都會(huì)訂閱該事件分發(fā)器。

此通信方法采用一對(duì)多關(guān)系,每當(dāng)當(dāng)前Actor觸發(fā)事件分發(fā)器后,監(jiān)聽(tīng)該Actor的其他Actor都會(huì)收到通知。

????4.1使用方法

事件分發(fā)器(Event Dispatch)是一種通用的消息傳遞機(jī)制,它可以在一個(gè)藍(lán)圖中定義一個(gè)事件,并在其他藍(lán)圖中調(diào)用該事件。使用事件分發(fā)器,需要注意以下幾點(diǎn):

① 事件必須在藍(lán)圖中定義。

② 事件分發(fā)器可以在任何藍(lán)圖中調(diào)用,可以是同一藍(lán)圖中的其他事件,也可以是不同藍(lán)圖之間的事件。

③ 事件分發(fā)器可以通過(guò)調(diào)用多個(gè)不同的事件實(shí)現(xiàn)對(duì)同一消息的廣播。

④ 事件分發(fā)器可以在藍(lán)圖之間傳遞消息和數(shù)據(jù),也可以調(diào)用其他藍(lán)圖中的函數(shù)或方法。


4.2使用場(chǎng)景

事件分發(fā)器通常用于以下場(chǎng)景:

  1. 當(dāng)需要在多個(gè)藍(lán)圖中實(shí)現(xiàn)相同的功能時(shí),可以通過(guò)定義一個(gè)事件,在多個(gè)藍(lán)圖中調(diào)用該事件,從而實(shí)現(xiàn)數(shù)據(jù)或消息的共享。

  2. ?當(dāng)需要廣播消息時(shí),可以通過(guò)調(diào)用事件分發(fā)器實(shí)現(xiàn)消息的廣播。

  3. ?當(dāng)需要調(diào)用其他藍(lán)圖中的函數(shù)或方法時(shí),可以通過(guò)調(diào)用事件分發(fā)器實(shí)現(xiàn)對(duì)其他藍(lán)圖的調(diào)用。


注意事項(xiàng):

  1. 事件分發(fā)器是一種異步機(jī)制,事件發(fā)送方和接收方之間不存在直接的調(diào)用關(guān)系,因此需要注意事件的發(fā)送和接收時(shí)序。

  2. 事件分發(fā)器是一種松散耦合的機(jī)制,可以在不同的藍(lán)圖之間進(jìn)行數(shù)據(jù)傳


五、使用區(qū)別和注意事項(xiàng)

藍(lán)圖接口和事件分發(fā)器都可以實(shí)現(xiàn)藍(lán)圖之間的通信,但它們的使用方法和適用場(chǎng)景不同。

在使用時(shí)需要注意以下幾點(diǎn):

1. 使用場(chǎng)景的區(qū)別

藍(lán)圖接口通常用于需要共享邏輯或數(shù)據(jù)的場(chǎng)景,例如不同角色的藍(lán)圖需要使用相同的功能或變量。而事件分發(fā)器通常用于消息廣播的場(chǎng)景,例如游戲中需要觸發(fā)某個(gè)事件時(shí),可以通過(guò)事件分發(fā)器向所有需要接收該消息的藍(lán)圖發(fā)送消息。

2. 調(diào)用方式的不同

調(diào)用藍(lán)圖接口時(shí),需要使用“實(shí)現(xiàn)接口”節(jié)點(diǎn)并將接口與實(shí)現(xiàn)進(jìn)行綁定,然后才能調(diào)用接口方法。而調(diào)用事件分發(fā)器時(shí),只需要在需要接收消息的藍(lán)圖中添加事件的響應(yīng)節(jié)點(diǎn),并將事件分發(fā)器與該節(jié)點(diǎn)進(jìn)行綁定。

3. 數(shù)據(jù)傳遞的方式不同

藍(lán)圖接口和事件分發(fā)器都可以用于數(shù)據(jù)傳遞,但它們的傳遞方式不同。在使用藍(lán)圖接口時(shí),數(shù)據(jù)是通過(guò)輸入輸出參數(shù)進(jìn)行傳遞的,而在使用事件分發(fā)器時(shí),數(shù)據(jù)是通過(guò)事件調(diào)用時(shí)所攜帶的參數(shù)進(jìn)行傳遞的。

4. 適用范圍的不同

藍(lán)圖接口和事件分發(fā)器都可以在同一藍(lán)圖中使用,但藍(lán)圖接口還可以在不同藍(lán)圖之間使用。而事件分發(fā)器只能在同一藍(lán)圖或基于同一藍(lán)圖的子藍(lán)圖之間使用。

5. 實(shí)現(xiàn)方式的不同

藍(lán)圖接口需要在藍(lán)圖中定義接口方法,并在實(shí)現(xiàn)接口的藍(lán)圖中添加相應(yīng)的實(shí)現(xiàn)方法。而事件分發(fā)器只需要在藍(lán)圖中定義事件,并在需要接收該事件的藍(lán)圖中添加相應(yīng)的響應(yīng)節(jié)點(diǎn)即可。


在UE5中,在關(guān)卡藍(lán)圖里調(diào)用某個(gè)對(duì)象的事件和在一個(gè)單獨(dú)的藍(lán)圖類里調(diào)用某個(gè)對(duì)象的事件有一些區(qū)別:

  1. 作用域不同:關(guān)卡藍(lán)圖里的事件只在該關(guān)卡中生效,而單獨(dú)的藍(lán)圖類可以在多個(gè)關(guān)卡中重復(fù)使用。

  2. 對(duì)象綁定方式不同:在關(guān)卡藍(lán)圖里,對(duì)象通常是通過(guò)在場(chǎng)景中直接放置或者在關(guān)卡藍(lán)圖中創(chuàng)建的,而在單獨(dú)的藍(lán)圖類里,通常需要手動(dòng)將對(duì)象引用傳遞給該類。

  3. 調(diào)用方式不同:在關(guān)卡藍(lán)圖里,通常通過(guò)拖拽事件節(jié)點(diǎn)來(lái)調(diào)用某個(gè)對(duì)象的事件,而在單獨(dú)的藍(lán)圖類里,可以通過(guò)直接調(diào)用對(duì)象的事件函數(shù)來(lái)實(shí)現(xiàn)。

  4. 維護(hù)和管理不同:?jiǎn)为?dú)的藍(lán)圖類可以更方便地進(jìn)行維護(hù)和管理,因?yàn)樗鼈兪且粋€(gè)獨(dú)立的模塊,可以進(jìn)行單獨(dú)的測(cè)試和修改,而關(guān)卡藍(lán)圖通常是和場(chǎng)景緊密耦合的,修改和測(cè)試會(huì)相對(duì)麻煩一些。

總的來(lái)說(shuō),在使用時(shí)需要根據(jù)具體情況選擇使用哪種方式,但單獨(dú)的藍(lán)圖類通常更加方便和靈活。



UE5-藍(lán)圖通信 :接口/事件分發(fā)器/引用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
韶关市| 邵阳县| 龙胜| 中西区| 德保县| 神木县| 凤山市| 中牟县| 乌苏市| 巴彦淖尔市| 绥阳县| 筠连县| 江山市| 裕民县| 澄城县| 甘孜| 彝良县| 拉萨市| 遂昌县| 永靖县| 城固县| 错那县| 沙洋县| 休宁县| 上犹县| 水富县| 阜康市| 交口县| 易门县| 白河县| 临沂市| 弥渡县| 龙游县| 两当县| 上杭县| 桃园市| 治多县| 新源县| 大余县| 思茅市| 隆回县|