虛幻四Gameplay Ability System入門(1)
這一篇的目的實現(xiàn)一個簡單的攻擊Ability。在開始之前,首先設(shè)計一下在藍圖中角色的普通攻擊是如何實現(xiàn)的:
- 鼠標左鍵啟動攻擊事件
- 攻擊事件開始,播放montage。
- montage中有notify,作用分別是啟動攻擊碰撞檢測,取消碰撞檢測,效果類似于傷害幀
- 如果發(fā)生碰撞,通過ApplyDamage對敵人造成傷害
- montage播放完成,結(jié)束攻擊事件。
在GAS系統(tǒng)中,我們應(yīng)該把攻擊看做一個完整的Ability,那么它負責的部分應(yīng)該包括2,4,5,角色本身負責的部分應(yīng)該是1,4。這樣我們就將攻擊的邏輯分解完成。
接下來開始實現(xiàn)。
創(chuàng)建攻擊Ability

命名為GA_MeleeAttack,然后打開角色藍圖
在BeginPlay中將普通攻擊能力給予技能系統(tǒng),然后給鼠標左鍵添加事件,啟動普通攻擊能力。


實現(xiàn)攻擊的碰撞檢測
打開角色的mesh,可以看到角色右手手掌的地方有一個名字為weapon_r的socket,我們將會在這個socket的位置添加一個球形碰撞器來檢測攻擊。如果使用自己的模型,沒有這個socket,可以手動添加。
添加完畢后,Sphere只需要檢測和Pawn的碰撞,重寫begin overlap事件

如果發(fā)生碰撞,則會向角色自己發(fā)送一個Gameplay Event,這個事件將會在接下來實現(xiàn)的攻擊能力中被響應(yīng),注意,這里的event tag應(yīng)該是Ability.Melee.DealDamage,表明這個事件為響應(yīng)普通攻擊的造成傷害。標簽需要自己手動添加。事件的data中,需要將被造成傷害的目標作為數(shù)據(jù)發(fā)送過去。
此外,我們希望的是只有主角的播放攻擊動畫的時候才會發(fā)生碰撞檢測,所以需要添加兩個Custum Event,同時在開始設(shè)置Sphere沒有碰撞。
角色部分的代碼完成。
普通攻擊Montage
創(chuàng)建一個AnimNotify_State。命名為AN_Melee
打開后override兩個函數(shù),Receive Notify Begin和Receive Notify End。
然后創(chuàng)建并打開自己的攻擊動畫Montage
在合適的位置添加Notify_State,AN_Melee

普通攻擊Ability
接下來,為了實現(xiàn)攻擊的效果,我們需要一個Gameplay Effect去制造傷害。命名為GE_Melee_DealDamge
打開藍圖后,添加一個Modifier,修改Health,修改方式為-20

接下來打開GA_MeleeAttack
大致的實現(xiàn)流程是,首先添加Task,PlayMontageAndWait,然后等待一個Gameplay Event,這個事件就是之前在角色部分添加的發(fā)生碰撞后發(fā)送的事件,接收到event后,就向target apply一個gameplayeffect,這個GE就是我們剛剛實現(xiàn)的GE_Melee_DealDamage.
測試
添加一個BP_Character到游戲里,開始游戲。
在GA_Melee中添加一個測試,打印受到傷害后的角色生命值

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