学习位置
- B站位置:红豆丨泥 UE AI 教程
- 原作者Youtube位置:https://youtu.be/-t3PbGRazKg?si=RVoaBr4476k88gct
- 素材自备
添加伤害系统
- AI死亡与受击事件
- 角色的死亡事件
- 远程AI的攻击系统替换成写好的伤害系统
- 近战AI的攻击事件
- AI控制器中修改攻击函数,当前攻击目标存在的时候就攻击当前目标,当前目标不存在就攻击新的目标
让AI可以相互攻击
- 这个关于行为树的逻辑并不多,全是伤害系统的判定
- 添加了一个判断当前AI是否死亡的服务器
- 远程攻击AI的行为树
- 近战攻击的AI行为树
让主角拥有法术攻击
- 自备主角的动画
- 新建主角的状态切换,进入魔法攻击状态与默认状态
添加十字准星UI
- 只有进入法术攻击状态才会显示这个UI
添加一个攻击组件
- 添加一个攻击组件
- 改一下远程AI的攻击检测,直接在我们创建的这个攻击组件中更改,然后将这个组件添加到AI基类中
- 在击组件中添加一个事件用来开火
- 然后在AI基类蓝图中添加这个攻击组件
- 此时远程AI的攻击传递就可以使用我们刚才写的攻击组件中的发射子弹事件了
让玩家可以魔法攻击
- 给玩家蓝图添加我们写的攻击组件,然后创建一个事件用来播放魔法攻击蒙太奇,与调用我们攻击组件的伤害传递
- 创建一个布尔变量用来停止魔法攻击时还可以移动的情况,在移动蓝图哪添加一个判断,当前是否可以移动,默认是可以移动的
- 魔法攻击时不能移动,等魔法攻击的蒙太奇播放完或者失败之后才可以移动
- 只有在魔法攻击状态才能进行魔法攻击
让近战AI可以格挡玩家的魔法攻击
- 新建一个AI格挡的枚举类型
- 在伤害系统接口中添加一个当前是否在攻击的函数
- 在玩家蓝图实现接口
- 在法球攻击中设置攻击变量
- AI基类中也实现一下这个攻击函数接口函数
- 远程AI攻击中设置攻击变量
- 添加一个装饰器用来判断是否有目标在正在攻击它们
- 在近战AI中创建一个开始格挡与结束格挡的事件,以及伤害系统中正在格挡的事件调用
- 创建一个格挡的任务
- 行为树
- 如果想让AI不要过早格挡,可以将玩家魔法球攻击的变量往攻击蒙太奇之后调整,这样AI的装饰器也能晚一点通知AI执行格挡任务
- 开启玩家或者远程AI的这个攻击系统通知伤害的格挡,不然近战AI伤害系统接收不到格挡的变量判断
- 让玩家切换状态可以改变一下摄像机的方位,切换丝滑一些
修复一些bug
当伤害敌人时没有获取玩家的Target目标
- 因为我们没有连接伤害系统中的造成伤害的原因,所以在攻击AI时它没有获取到新的攻击目标
修复玩家可以一直重复攻击状态
- 在玩家魔法攻击位置那添加一个
DoOnce
,等攻击完成后进行重置
修复目标死亡后敌人切换状态
- 原因是在AI控制器中,设置攻击状态时,没有判断当前目标是否死亡就执行了设置攻击状态,只有目标存在且没有死亡才会设置攻击状态
AI被攻击后格挡还是会滑步,设置停止移动
- 因为行为树中虽然设立格挡时变为Idle状态,但是因为会有一定加速度,所以还是会移动,在格挡处设置停止移动就行
魔法球攻击阻挡远程AI视线
- 魔法球攻击会阻挡远程AI的视线,让远程AI会躲避玩家的魔法球攻击,因为远程AI的EQS检测总是试图保持在玩家的视线范围之内,而魔法球会阻挡AI视线,让AI以外看不到目标了,所以就尝试移动
- 将魔法球蓝图的碰撞视线改为不可见就行
让主角的血条UI设置到屏幕左下方而不是在头上
- 在十字准心UI中添加血条UI,绑定函数进行数据互联
给玩家添加受击反应
修复魔法球攻击的偏差问题
- 我们用射线检测来判定击中的物体选择是否是直接命中目标还是慢慢命中到攻击的终点