学习位置
- B站位置:红豆丨泥 UE AI 教程
- 原作者Youtube位置:https://youtu.be/-t3PbGRazKg?si=RVoaBr4476k88gct
- 素材自备
改良近战AI格挡行为
- 把近战AI的格挡行为从行为树中单独一个任务分块中给删除掉,因为我们希望敌人在受到伤害后立即进行阻止在接收伤害函数中处理它
- 新建一个函数用来尝试概率性进行格挡
- 重写近战AI的TakeDamage函数,在受到伤害之前尝试进行格挡
- 改写一下格挡的函数
团队敌人
检查AI是属于同一团队
- 在伤害系统接口里面添加一个获取团队的函数
- 在玩家与敌人基类蓝图中实现一下这个函数
- 在AI控制器中添加一个函数用来判断感知到的人是否与自身在同一团队
- 在AI的视觉感官中,不需要只针对玩家进行攻击了,判断是否看到的Actor是不是同一团队就行了
同一团队不会相互造成伤害
- 将近战AI的攻击碰撞检测,由单体换为多体的
- 这样也会造成一个bug,就是AI攻击一次,会多次击中同一Actor,我们要确保每次挥刀只击中一次Actor一次
检查是否在同一团队,是否多次击中
- 在攻击接口里面添加个函数用来检测
- 新建一个伤害所有非团队成员函数
- 这样这个函数就让多次检测到同一Actor,只受到一次伤害的计算,并且同一团队的不会相互造成伤害
- 修改近战AI伤害检测的逻辑
远程AI的伤害检测修改
- 远程AI攻击到第一个非同团队Actor造成伤害,如果中间格挡一个同团队Actor,子弹会穿过队友,打中攻击的那个敌对Actor
- 在攻击接口中新建一个函数,跟近战AI那个检测伤害非团队函数差不多
修改一个小bug
- 如果攻击队友的话,它会来攻击你,这是因为,在伤害感官系统,敌人蓝图基类中的受击反应事件哪里,受到攻击时,有个设置是否知道上一个攻击目标,但是没有新的攻击目标时,这个时候队友攻击它,就会把队友设置成新的攻击目标
- 在基类的受击反应设置攻击对象这里做个判断就行
制作法师AI
素材自备
- 实现一些需要的基本接口函数
法师AI攻击行为
- 重写一下法师AI的攻击接口事件
法师AI瞬移技能攻击
- 瞬移特效资产来自
- 在法师AI中添加一个瞬移事件与瞬移结束后重置一下属性的事件
- 瞬移结束事件
- 为远程AI的行为树添加一个任务,用来作为法师AI的瞬移技能,注意一点,之前做绑定事件分发器动没有进行取消绑定,这样是有些问题的,当我们完成事件分发器的调用要完成的逻辑时,最好是需要结束绑定的。
瞬移行为树逻辑
修复法师AI瞬移Bug
- 限定瞬移的状态,不能一下子执行多次瞬移
- 瞬移时停止当前的蒙太奇播放。例如:攻击
- 瞬移结束停止一下移动,然后恢复一下可以瞬移的限定变量
- 瞬移过程后攻击会打中自己,是因为攻击忽略自己应该是忽略胶囊体组件,告诉这个射弹忽略自己的胶囊体组件
AI控制器对瞬移技能问题
- !!!!如果瞬移速度很慢,那么就把AI控制器改回为群集AI控制器,因为改为群集AI跳跃又会出问题,所以之前就改回普通AI控制器了
制作法师AI(二)
制作单独法师AI的行为树
- 将之前法师AI用的远程AI的行为树回复成原样,法师AI要单独用自己的行为树
- 复制一份远程AI的行为树,作为法师AI的行为树,进行一些更改,首先将法师AI的移动到视线范围内的EQS范围设置为,我们的防御范围,应该这个比攻击范围更远一点,这个里面的
Value
值500
并不重要,这个是如果我们没有设置黑板键,它就会是默认值为这个Value
法师瞬移的EQS
- 新建一个法师瞬移的EQS,让法师瞬移到玩家看不到的身后点
- 老样子,进行测试时,将测试目标换成玩家生成位置,且不能在狭窄的位置,因为法师AI要发射魔法球
- 首先将路径测试换成道路存在
- 追踪测试的检测形状为球形,设置半径,这样就会淘汰掉窄的位置了
- 添加一个路径测试,来只会瞬移到离玩家远点的位置,最小范围在350,最大范围这里只是临时给个500好看测试结果,因为这个最大范围要进行数据绑定,与AI的攻击范围进行绑定
- 还需要添加一个距离测试,保证自己离是玩家最远的点,离玩家最远的点都是最高的
- 记得将最大范围值进行数据绑定,换回测试目标为玩家
法师的行为树
- 添加一个任务用来单独作为法师AI的攻击任务
- 行为树逻辑
法师的治疗功能制作
- 添加一下资产包
- 在法师AI蓝图中添加两个事件用来生成回血的AOE法阵,与结束销毁法阵
添加法师回血Task
回血行为树逻辑
- 行为树逻辑
- 给回血生成AOE那个位置添加一个射线检测,让生成位置在AI脚下
- 运行结果
解决一些细节问题
- 如果,治疗AOE由于什么原因永远不会走到调度程序就会造成一些bug,所以我们将调度程序移到前面
- 如果AI正在攻击时,玩家消失在AI视线中,AI就会进行
Move To Line of Sight
这个序列,那敌人就会一边攻击一边移动,滑步现象,所以我们需要将检测AI是否看见玩家的这个装饰器中止模式给调成None
,这样这个序列就会执行完整不会提前中断。