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

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

Unreal Blueprint Interface藍圖接口詳解

2023-03-29 09:22 作者:蟲兒飛5833  | 我要投稿

一、接口、普通類、抽象類

對比往往是快速理解一個概念最好的方法,本人之前先學的C#,后有學了Unity,用unity做了四年左右的建筑方面數(shù)字孿生的項目;所以在學Unreal的時候?qū)WC++的時候,我總會和Unity以及C#做對比,這樣學起來效率會更高。

讓我們先了解一下C++或者C#等編程語言中的接口的定義:

在C++中接口的定義是:接口描述了類的行為和功能,而不需要完成類的特定實現(xiàn)。

C++ 接口是使用抽象類來實現(xiàn)的,抽象類與數(shù)據(jù)抽象互不混淆,數(shù)據(jù)抽象是一個把實現(xiàn)細節(jié)與相關(guān)的數(shù)據(jù)分離開的概念。如果類中至少有一個函數(shù)被聲明為純虛函數(shù),則這個類就是抽象類。



設(shè)計抽象類(通常稱為 ABC)的目的,是為了給其他類提供一個可以繼承的適當?shù)幕?。抽象類不能被用于實例化對象,它只能作為接口使用。如果試圖實例化一個抽象類的對象,會導致編譯錯誤。

因此,如果一個 ABC 的子類需要被實例化,則必須實現(xiàn)每個虛函數(shù),這也意味著 C++ 支持使用 ABC 聲明接口。如果沒有在派生類中重寫純虛函數(shù),就嘗試實例化該類的對象,會導致編譯錯誤。

可用于實例化對象的類被稱為具體類。

(以上是取自菜鳥教程)https://www.runoob.com/cplusplus/cpp-interfaces.html

這里對比一下C#還是有些不同的,C++中你可以理解為接口就是抽象類,因為C++中并沒有interface關(guān)鍵字,所以C++的接口是通過抽象類來實現(xiàn)的,所以C++中的接口應(yīng)該理解為抽象類:

1.不能實例化;2.繼承該接口的類必須實現(xiàn)該接口的所有虛函數(shù);3.可以包含屬性。

在Java和C#中有所不同,它們有interface關(guān)鍵字;所以抽象類和接口是有區(qū)別的:抽象類中可以定義屬性、方法的實現(xiàn),而接口中不能定義屬性,方法也不能包含代碼實現(xiàn);共同點就是子類繼承它們時,必須實現(xiàn)它們中的所有抽象方法或者接口中聲明的方法,它們只能被繼承來實現(xiàn)具體功能。

抽象類和接口與普通類相比,普通類的繼承也可以由子類重寫父類的方法,但是這種重寫不是必須的,這好處就是更靈活,壞處就是有可能忘記重寫,造成類的誤用。

二、Unreal藍圖中的Blueprint Interface

如果你看明白編程語言中的接口的定義和用途,那么這就是藍圖中Blueprint Interface的定義和作用,因為藍圖中的就是通過編程語言來實現(xiàn)的。

1)先定義一個Blueprint Interface藍圖類


從藍圖接口的可視化面板中可以看出,可以添加方法,這些就是代碼中的虛方法;而且藍圖接口中這些虛方法是無法寫具體的實現(xiàn)的,圖中可以看出是灰色的,這和代碼中的接口是一致的。

2)實現(xiàn)藍圖接口

先把接口添加到普通藍圖中,這個添加類似于繼承,我測試過即使不在EventGraph中使用OnInteract編譯也不會報錯,所以我認為添加接口到藍圖中時,應(yīng)該就重寫了改虛方法,只不過是沒有具體的實現(xiàn)內(nèi)容,具體內(nèi)容還是要在EventGraph中寫,所以才能通過編譯。


3)調(diào)用藍圖接口中的方法


上面是右鍵鼠標點擊事件觸發(fā),當點擊到物體時,執(zhí)行該物體繼承自接口并重寫了的OnInteract方法。

猜想:這個藍圖接口的方法在所有藍圖中可以直接訪問,其他自定義的事件也是可以的。EventGraph中編寫邏輯時,例如調(diào)用某個事件或者某個方法,肯定是在調(diào)用之前先找到了這個類型實例的引用,上圖中可以看出,Hit Actor返回的就是相應(yīng)的引用,如果擊中的物體沒有該OnInteract方法,自然也就不會執(zhí)行。

三、補充

藍圖接口與C++的接口還有一個不同點,在C++中接口都可以重寫,無論是有無參數(shù)或者返回值;但是在藍圖接口中就不同了,藍圖接口中如果沒有傳入?yún)?shù)即Inputs,也沒有返回值即Outputs,那么該接口可以是一個事件,當然也可以是一個函數(shù),其內(nèi)部無法添加功能;也無法直接拖入到EventGraph,只能右鍵搜索。如下圖所示的OnInteract接口。


當接口有輸入?yún)?shù)Inputs時,那么接口同上,該接口可以是一個事件,當然也可以是一個函數(shù),其內(nèi)部無法添加功能;也無法直接拖入到EventGraph,只能右鍵搜索;雙擊會進入相應(yīng)的接口視圖,如下圖所示。


當接口有輸出參數(shù)的時候,情況就和C++的接口比較類似了,可以直接拖入到EventGraph,也可以雙擊編輯添加新的功能,但是此時就無法作為事件使用了。如下圖所示。


總結(jié)來說就是有輸出參數(shù)時,藍圖接口就是一個函數(shù),可以添加新的功能;如果沒有輸出參數(shù),那么藍圖接口就是一個執(zhí)行事件或者一個函數(shù),但都無法編輯。

這是我目前的理解,如果有錯請大佬糾正,感謝。


Unreal Blueprint Interface藍圖接口詳解的評論 (共 條)

分享到微博請遵守國家法律
中西区| 中超| 双流县| 康定县| 西乡县| 深水埗区| 高雄县| 西贡区| 商城县| 梅河口市| 江油市| 永兴县| 杨浦区| 宁蒗| 来宾市| 颍上县| 财经| 隆子县| 宁乡县| 凉城县| 玉溪市| 寿光市| 新河县| 永福县| 开原市| 美姑县| 芜湖市| 建水县| 蚌埠市| 亚东县| 桐庐县| 平塘县| 乌拉特中旗| 陵川县| 沂南县| 洛扎县| 翼城县| 吉水县| 周至县| 灌南县| 枝江市|