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