UE4_簡易AI_Ai攻擊


判斷Ai發現玩家后的距離,如果大於300就執行正常的移動速度改變,如果小於300就隨機一個出拳的動畫。

 

 

 

 這個出現了bug,Ai一直抽搐,原因是小於300時這個節點一直在從頭執行,因為最開始的觸發事件是event tick,所以加一個Can Attack

 

在Ai的揮拳動畫加一個動畫通知,

 

 

 

 

 

 

 

 

依然有個bug,就是AI出拳的時候我們打他一下,他會直接切換到受擊動畫,導致他自己的出拳動畫播放不到AiAttackEnd上,導致他自己的CanAttack永遠為false,為了解決這個bug,只好把AI的受擊動畫的最后都加上通知AiAttackEnd。

 

加完之后,第三個bug。出現的原因應該是,我們恰好在AttackEnd上攻擊,導致受擊動畫瞬間被新的攻擊動畫覆蓋掉。

這個出現概率不是很高,先不管他。

 

還有一個bug,AI會一直攻擊,並在攻擊間隙一直往前走。要把這個往前走的取消掉。(之前設置的300太多了,重新設置為120.如果<120了,那就原地打拳停止移動)

 

 

 

 

 

 

然后做Ai攻擊我們的傷害和動畫判定

 給Ai加一個Arrow,當他攻擊的時候就從Arrow里發射一條射線

 

 

 找到AI攻擊的倆動畫蒙太奇,創建新的動畫通知AiAttackFront

 

 

從Arrow為起點,發射一條長度為120,半徑為10的attack射線。 

 

 

 然后把玩家player的碰撞預設的attack打開,這樣就可以被這條射線碰到了

 

 

 如果AI發射的射線碰到物體了,就把攻擊的信息發給之前做的藍圖接口DamagePass

 

 

 同時我們玩家的藍圖也得繼承一下該BPI

 

 

 

測試一下有沒有問題

 

 

 暫時沒有問題,數據都能傳進來。

 

 

 

因為不同武器受擊的時候動畫是不一樣的,所以我們要在WeaponDataTable里面加一項,手持該武器時的受擊動畫。

找到相應的動畫,別忘了在最后加上AttackEnd,跟Ai一樣挨揍需要重置一下普攻。

 

 

 

 

 然后寫我們挨揍的邏輯

先判斷是否手持武器,如果有武器,就找到武器的相應受擊動畫,並播放

 

 

 

然后做一個,玩家挨打后向后強制位移的邏輯

首先得在DamagePass里傳過來,

 

 

最后用一個launch character發射玩家,方向和力大小都是剛剛新添加的Force Direction。

 

 

 

在AI的傳Damage信息那里,把Arrow的方向作為力的方向,再乘一個數值作為力的大小,就得到了我們需要的力。

然后先把Force默認的改成130

 

 

 

 暫時沒有問題,下面做玩家的血量和減少

跟AI一樣的計算公式

 

 

 然后做一個UI,當我們生命值過低時屏幕虛化

添加一個背景虛化,讓他覆蓋整個屏。並把它設置為一個變量

 

 

 在關卡藍圖中加載上這個UI

 

 

 在Player里新建一個Blur的變量,用來說明我們當前虛化值是多少

(Blur等於每次Blur+0.1倍的damage)

 

 

 在Ui里寫入虛化值大小的邏輯

 

 

 如果一段時間沒受到攻擊,就把虛化值清零。

解釋一下,門默認是關的,當門開時執行的就是Blur漸漸恢復為0的邏輯,

當我們挨打時就把門關上,如果保持3秒沒挨打,就把門打開。

 

 

 新加一個border,把默認顏色改為黑,默認顯示改為Hidden

 

 當我們血量低於0時,就顯示這個黑border,表示死亡

 

 然后再做一個玩家的死亡動畫

在武器的結構體里,再加上一個死亡動畫

 

 

把各個武器的死亡動畫寫上

然后回到UI的藍圖里,

先判斷是否有武器,如果有,執行相應的武器死亡動畫。

Do once是因為,觸發的事件是event tick,死亡只有一次,如果不Do once的話Ai會一直攻擊,這段邏輯會一直執行,一直重復的播放死亡動畫等等。

死亡之前把射線的碰撞體關掉,AI就無法繼續攻擊了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM