我們先來看看什么是介面?
官方的定義是:
介面類有助于確保一組(可能)不相關的類實作一組通用函式,在某些游戲功能可能被大量復雜而不同的類共享的情況下,這非常有用,例如,某個游戲可能有這樣一個系統,依靠該系統輸入一個觸發器體可以激活陷阱、警告敵人或向玩家獎勵點數,這可以通過針對陷阱、敵人和點數獎勵器執行"ReactToTrigger"函式來實作,然而,陷阱可能派生自"AActor",敵人可能派生自專門的"APawn"或"ACharacter"子類,點數獎勵可能派生自"UDataAsset",所有這些類都需要共享功能,但它們沒有除"UObject"之外的共同上級,在這種情況下,推薦使用介面,
其實要理解介面很簡單,我們可以把整個程序想象成一個“炸山工程”,介面就是Bomb,山就是我們的Actor,引線就是我們的觸發組件,
要實作炸山,我們要做的首先就是把Bomb(介面)放到我們需要炸的山(Actor)里,最后再通過引線(觸發組件)對介面進行引爆(執行)

好的,現在我們用一個互動的例子來看看介面是怎么用的吧,
首先我們要創建一個C++的介面類


我們給這個介面類命名為SGameplayInterface
現在我們來看看這個介面類里面

這個介面類與其他的類不同,他包含了兩個Class,第一個Class是U開口的,第二個是I開頭的,我們通常不需要管第一個Class,因為第一個Class只是用來創建和生成第二個I開頭的Class的,
所以我們用來實作介面的一些函式和事件都會放到第二個Class里面,
現在我們來定義介面函式,

我們的函式名為Interact (記住,等下要考的),并且設定的函式宏為BlueprintCallable,BlueprintNativeEvent,代表了我們需要使用函式時需要進行implement重寫,并且該函式是藍圖可呼叫的,不知道為什么的可以看我之前關于函式宏的博客,
至此,我們的介面函式定義就已經結束了,它將作為一個父類被其他的類繼承,然后重寫它的方法,
我們新建一個需要介面的Actor

新建完之后,我們需要在紅色部分添加對ISGameplayInterface的繼承,然后再藍色部分重寫Interact的_Implement函式,

我們想要的效果是,觸發之后讓上面的蓋子翻轉一下,這個物體如圖所示,

那現在問題來了,我們要怎么用觸發這個函式呢?
要實作這個操作,我們只需要給我們的角色添加一個觸發組件,通過碰撞事件觸發該組件,
所以我們現在新建一個名為:SInteractionComponent的ActorComponent類

我們在這個類中實作一個名為PrimaryInteract的函式


現在我們來分析一下這段代碼,前面的部分與本期內容無關,但是他干的一個事情就是:使用線性碰撞的方式來檢測Actor看到的物體,
并且看到的物體為HitActor
橙色框,就是要判斷玩家看到的這個物體是否實作了我們所定義的介面
藍色框就是,執行我們在ASItemChest里面的重寫的Interact函式,
值得注意的是!!
我們之前重寫的函式名是Interact_Implement(),而我們執行的使用的是Execute_Interact(HitActor,MyPawan),重寫的時候Interact后面要添加_Implement,以及執行時需要在函式前面加Execute_都是UE引擎所要求的,
并且Execute_XXXXX(param1,param2, ...)這個函式會比我們實作的_Implement函式多一個引數,那就指明我們時哪個物件需要執行Interact函式,本例子里,就是 HitActor
現在我們只需要添加這個組件在我們的角色里面,通過呼叫這個組件就可以實作角色與物體互動的操作了,
首先是添加組件

然后是在角色的C++中設定一個PrimaryInteract函式,函式的內容就是呼叫組件的PrimaryInteract()函式,(這里兩個函式名字都是一樣的,但是所在的類是不一樣的,注意區分)

最后系結我們的鍵位就完成了,

最后在從后至前理一理這里的邏輯:
首先我們通過系結的鍵位可以呼叫角色的Primaryinteract()函式,然后函式里面又會呼叫名為InteractionComp這個ActorComponent的PrimaryInteract()函式
在這個函式里面我們會通過線性碰撞的方式來判斷,此刻玩家眼前的物體是否繼承了自定義的介面,如果是,則執行介面的Interact函式,
從而實作玩家與物體互動的程序
效果:
通過我們系結的鍵位,這個蓋子翻轉了

剛學這里的時候,沒有理清楚這里的邏輯會非常吃力,希望能幫到你理解Inferface的概念,
參考鏈接:
虛幻引擎中的介面 | 虛幻引擎5.0檔案 (unrealengine.com)
Calling Interface Functions In C++ - Programming & Scripting / UI - Unreal Engine Forums
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/506027.html
標籤:其他
下一篇:shell編程2
