判斷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就無法繼續攻擊了。