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就无法继续攻击了。

 

 

posted @ 2020-05-27 20:53  vantablack  阅读(2049)  评论(1编辑  收藏  举报