虛幻四Gameplay Ability System入門(2)

虛幻四Gameplay Ability System入門(1)

這一篇的目的實現(xiàn)一個簡單的攻擊Ability。在開始之前,首先設(shè)計一下在藍圖中角色的普通攻擊是如何實現(xiàn)的:

  1. 鼠標左鍵啟動攻擊事件
  2. 攻擊事件開始,播放montage。
  3. montage中有notify,作用分別是啟動攻擊碰撞檢測,取消碰撞檢測,效果類似于傷害幀
  4. 如果發(fā)生碰撞,通過ApplyDamage對敵人造成傷害
  5. montage播放完成,結(jié)束攻擊事件。

在GAS系統(tǒng)中,我們應(yīng)該把攻擊看做一個完整的Ability,那么它負責的部分應(yīng)該包括2,4,5,角色本身負責的部分應(yīng)該是1,4。這樣我們就將攻擊的邏輯分解完成。

接下來開始實現(xiàn)。

創(chuàng)建攻擊Ability

image.png

命名為GA_MeleeAttack,然后打開角色藍圖

在BeginPlay中將普通攻擊能力給予技能系統(tǒng),然后給鼠標左鍵添加事件,啟動普通攻擊能力。



實現(xiàn)攻擊的碰撞檢測

打開角色的mesh,可以看到角色右手手掌的地方有一個名字為weapon_r的socket,我們將會在這個socket的位置添加一個球形碰撞器來檢測攻擊。如果使用自己的模型,沒有這個socket,可以手動添加。


4.JPG
5.JPG

添加完畢后,Sphere只需要檢測和Pawn的碰撞,重寫begin overlap事件


6.png

如果發(fā)生碰撞,則會向角色自己發(fā)送一個Gameplay Event,這個事件將會在接下來實現(xiàn)的攻擊能力中被響應(yīng),注意,這里的event tag應(yīng)該是Ability.Melee.DealDamage,表明這個事件為響應(yīng)普通攻擊的造成傷害。標簽需要自己手動添加。事件的data中,需要將被造成傷害的目標作為數(shù)據(jù)發(fā)送過去。


7.JPG
8.PNG

此外,我們希望的是只有主角的播放攻擊動畫的時候才會發(fā)生碰撞檢測,所以需要添加兩個Custum Event,同時在開始設(shè)置Sphere沒有碰撞。

9.PNG

角色部分的代碼完成。

普通攻擊Montage

創(chuàng)建一個AnimNotify_State。命名為AN_Melee


10.PNG

打開后override兩個函數(shù),Receive Notify Begin和Receive Notify End。

11.PNG
12.PNG

然后創(chuàng)建并打開自己的攻擊動畫Montage

在合適的位置添加Notify_State,AN_Melee

17.png

普通攻擊Ability

接下來,為了實現(xiàn)攻擊的效果,我們需要一個Gameplay Effect去制造傷害。命名為GE_Melee_DealDamge


13.PNG

打開藍圖后,添加一個Modifier,修改Health,修改方式為-20


18.png

接下來打開GA_MeleeAttack

大致的實現(xiàn)流程是,首先添加Task,PlayMontageAndWait,然后等待一個Gameplay Event,這個事件就是之前在角色部分添加的發(fā)生碰撞后發(fā)送的事件,接收到event后,就向target apply一個gameplayeffect,這個GE就是我們剛剛實現(xiàn)的GE_Melee_DealDamage.


14.PNG

測試

添加一個BP_Character到游戲里,開始游戲。

在GA_Melee中添加一個測試,打印受到傷害后的角色生命值

19.png

16.PNG

可以看到被攻擊的對象血量從0變成了-20。完成,下一篇文章會實現(xiàn)UI和GAS的關(guān)聯(lián)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容