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

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

【淺談UE】增強(qiáng)輸入系統(tǒng)與GAS聯(lián)動(dòng)的一種思路

2023-06-13 20:02 作者:濮之武  | 我要投稿

Unreal的增強(qiáng)輸入系統(tǒng)GAS均是靈活性和擴(kuò)展性很高的Gameplay相關(guān)框架,輸入控制與技能的關(guān)聯(lián)十分重要。然而GAS中默認(rèn)的輸入綁定功能較少,擴(kuò)展性較弱,如果能將增強(qiáng)輸入系統(tǒng)的輸入配置與GAS進(jìn)行聯(lián)動(dòng),可以增強(qiáng)技能系統(tǒng)中輸入配置的靈活性,以滿足更多項(xiàng)目中的需求。實(shí)際上,筆者調(diào)查二者的關(guān)聯(lián)時(shí)發(fā)現(xiàn)Epic官方并未提供一種明確的關(guān)聯(lián)方案,因此筆者根據(jù)相關(guān)的研究提供一種聯(lián)動(dòng)思路。

1. 概念介紹

1.1 增強(qiáng)輸入系統(tǒng)(Enhanced Input System)

Unreal的增強(qiáng)輸入系統(tǒng)是一套新引入的輸入系統(tǒng),以插件形式存在,在UE 5.1后默認(rèn)添加至工程中,并且Epic官方開始逐漸廢棄舊的輸入系統(tǒng),因此研究增強(qiáng)輸入系統(tǒng)比較有必要。

增強(qiáng)輸入系統(tǒng)具體的概念與使用細(xì)節(jié)不在本文的討論范圍內(nèi),若讀者不清楚相關(guān)內(nèi)容可以查看官方文檔。下面為筆者使用過程中對(duì)其的一些理解和總結(jié):

  1. 資產(chǎn)化行為與映射,方便直接在編輯器中配置

  2. 輸入的返回值最高可確定至三維,處理時(shí)更加靈活和方便

  3. 不同輸入之間的優(yōu)先級(jí)限定

  4. Modifier可方便處理輸入的原始值,基本無需在業(yè)務(wù)邏輯內(nèi)再對(duì)返回值進(jìn)行修訂

  5. Trigger可方便決定行為的觸發(fā)方式

  6. 官方提供大量Modifiers和Triggers的同時(shí),還可以自行擴(kuò)展上述類以實(shí)現(xiàn)項(xiàng)目的特定需求

基本上,使用增強(qiáng)輸入系統(tǒng)需進(jìn)行如下幾步:

  1. 確定InputAction(IA),決定IA的返回值類型(bool? float? Vector2D? ...)

  2. 確定InputMappingContext(IMC),完成物理輸入與IA的綁定。同時(shí)添加相關(guān)的Modifier和Trigger

  3. 增強(qiáng)輸入系統(tǒng)中添加IMC

  4. 綁定IA對(duì)應(yīng)的回調(diào)函數(shù),實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯

本文中所討論的增強(qiáng)輸入系統(tǒng)的操作主要基于上述幾個(gè)步驟。


1.2 技能系統(tǒng)(Gameplay Ability System)

GAS系統(tǒng)為高度靈活的技能框架,經(jīng)常用于RPG、MOBA等項(xiàng)目中,其具體的教程可參考GASDocumentation。

GAS中,與輸入相關(guān)的模塊主要分布于GameplayAbility(GA)中,GA用于處理游戲的技能配置。針對(duì)于GA的調(diào)用流程,我總結(jié)了一份簡單的思維導(dǎo)圖。


GA的主要流程

簡單來說,GA需要先被授予(Give),即在AbilitySystemComponent(ASC)上注冊GASpec。然后根據(jù)不同的激發(fā)(Activate)方式激發(fā)技能。

2. 實(shí)現(xiàn)思路

2.1 思路分析

實(shí)現(xiàn)增強(qiáng)輸入系統(tǒng)和GAS的聯(lián)動(dòng),本質(zhì)上是實(shí)現(xiàn)對(duì)鍵盤輸入、輸入行為、技能響應(yīng)、技能實(shí)現(xiàn)的一系列控制,因此據(jù)此對(duì)各個(gè)部分進(jìn)行拆解分析:


思路呈現(xiàn)

簡單來說,將GAS中技能的輸入綁定部分交給增強(qiáng)輸入系統(tǒng)中完成,GA被賦予后不用通過GAS的輸入綁定激發(fā)GA,而是通過手動(dòng)調(diào)用TryActivateAbilityByClass()函數(shù)手動(dòng)激發(fā)GA,而調(diào)用的位置自然就是在IA的回調(diào)中。

當(dāng)玩家按下一個(gè)按鍵后,根據(jù)已注冊至增強(qiáng)輸入系統(tǒng)中的IMC的輸入與IA的映射配置,以及相關(guān)的Modifiers和Triggers的調(diào)整,IA的回調(diào)被調(diào)用,在IA回調(diào)內(nèi)則激發(fā)對(duì)應(yīng)的GA,而激發(fā)GA后GA內(nèi)部的邏輯被執(zhí)行。以此完成增強(qiáng)輸入系統(tǒng)和GAS的聯(lián)動(dòng)。

2.2 具體實(shí)現(xiàn)參考

以下展示我的Demo項(xiàng)目中的實(shí)現(xiàn),僅供參考。


輸入的配置基本為IA和IMC,一個(gè)技能對(duì)應(yīng)一個(gè)IA。

IMC中配置好輸入的映射關(guān)系,以及Modifiers和Triggers


可以選擇通過藍(lán)圖或C++的方式綁定IMC,筆者僅展示C++的方式。筆者選擇將輸入相關(guān)的配置對(duì)接至PlayerController中。

ASC中需要提前賦予GA。筆者的ASC存放在PlayerState中,若存放在Pawn上,可進(jìn)行相應(yīng)的調(diào)整。


在IA的回調(diào)中激發(fā)或取消GA。


GA的激發(fā)利用ASC::TryActivateAbilityByClass函數(shù)。筆者在PlayerController中封裝了ActivateAbility函數(shù)以方便在藍(lán)圖中快速配置需要對(duì)接的GA,其底層調(diào)用的函數(shù)即為TryActivateAbilityByClass()。

由于Epic官方并未將GA取消的函數(shù)暴露到藍(lán)圖中,并且官方也未提供根據(jù)GA類模板取消技能的函數(shù),因此筆者決定仿照TryActivateAbilityByClass來實(shí)現(xiàn)TryCancelAbilityByClass,并擴(kuò)展至項(xiàng)目擴(kuò)展的ASC子類。

再在PlayerController中暴露DeActivateAbility藍(lán)圖方法。

ActivateAbility后GA的ActivateAbility將會(huì)被執(zhí)行,GA的相關(guān)邏輯可實(shí)現(xiàn)在此。GA的結(jié)束可以在ActivateAbility內(nèi)部執(zhí)行,配合Tasks和Events等進(jìn)行控制。也可以在IA的回調(diào)中調(diào)用DeactivateAbility結(jié)束技能。技能結(jié)束后會(huì)調(diào)用OnEndAbility函數(shù),一些重置的邏輯可在此處添加。以下是加速技能的GA實(shí)現(xiàn):


3. 存在的問題與思考

  1. GAS中的Tasks和增強(qiáng)輸入系統(tǒng)間存在一定的重疊與沖突。如與輸入相關(guān)的Tasks無法很好地與增強(qiáng)輸入系統(tǒng)聯(lián)系,因?yàn)槲丛贕AS中對(duì)GA進(jìn)行輸入綁定。GAS的增強(qiáng)輸入綁定有待官方的支持。

  2. Trigger靈活的配置項(xiàng)無法靈活地?cái)U(kuò)展GA的輸入。由于兩套系統(tǒng)間官方本身并未實(shí)現(xiàn)對(duì)接,因此若希望更靈活地實(shí)現(xiàn)相關(guān)功能需要搭建中間層。如可自定義擴(kuò)展Trigger,在自定義的Trigger內(nèi)部處理對(duì)GAS相關(guān)邏輯的監(jiān)測。

參考資料

官方文檔

GAS文檔

相關(guān)源代碼

知乎地址:https://zhuanlan.zhihu.com/p/636717219

【淺談UE】增強(qiáng)輸入系統(tǒng)與GAS聯(lián)動(dòng)的一種思路的評(píng)論 (共 條)

分享到微博請遵守國家法律
墨脱县| 青河县| 习水县| 八宿县| 玉龙| 澄江县| 承德市| 馆陶县| 湖口县| 招远市| 石家庄市| 马边| 呈贡县| 博乐市| 六盘水市| 广灵县| 黄龙县| 伽师县| 错那县| 谢通门县| 从江县| 丰都县| 康定县| 陇西县| 黔西县| 封开县| 潞西市| 区。| 宁德市| 彝良县| 洛浦县| 黄山市| 武胜县| 东明县| 北宁市| 安陆市| 阿拉善盟| 吉林市| 驻马店市| 蛟河市| 通道|