一,打开敌人的角色蓝图,编写以下蓝图,该蓝图只是创建一个敌人并非ai行为树
1.编写蓝图
2.打开主界面,创建一个导航网格体积,上一章都有讲,在添加体积这里面,找到导航网格体积,点击创建,自己弄范围,可以看到,我图下是绿色的就行了
3.运行一下,可以发现角色移动到玩家,并进行攻击
二,创建以下,基础篇有讲
第一个是ai控制器,第二个是黑板,第三个是task任务,第四个是AI行为树
其中,黑板和task是在AI行为树里创建的
注意敌人的角色蓝图,点击类默认,选择我们创建的ai控制器
打开我们上一章建立的ai_tree
1.打开黑板,创建一个变量名为AttackTarget,并在右侧黑板细节处,打开键类型,基类选择Actor
定位目标
回到行为树,创建一个moveto并命名为MovetoTaget,选中它并右侧细节,黑板键选择我们刚刚创建的变量
2.打开我们创建的ai控制器
3.编写以下蓝图,注意选择对应的ai行为树
4.在变量ai处,拖出blackboard变量,编写以下蓝图,紫色那块是拖出来提升为变量的
记得命名
5.我们把之前创建好的object变量的命名复制粘贴到,key name的变量里,选中我们这变量
6.添加以下蓝图
三,尝试一下只使用ai行为树,打开敌人的角色蓝图断开事件触发链接,可以发线角色只追着玩家
这里的Attack,不要断掉,我这里错了
四.打开我们在ai行为树创建好的task
1.这是我们上一章ai行为树讲的ai巡逻,我们段开事件触发链接
2.打开敌人的角色蓝图
添加一个事件分发器 OnAttackEnd
再把刚创建的事件分发器放播放蒙太奇之后调用
3.回到我们的task,事件执行触发链接如下
如果没有事件触发器就会,导致敌人攻击的时候会卡在的行走和攻击之中
4.打开我们的ai行为树
链接我们的task
这个可以不选,目前不起什么作用,我们没有在黑板设置attack变量,优先级比较次,
好的我们运行就可以很流畅的攻击主角了
我们可以加一个wait,打完后停一下
如果你没有给敌人添加npc的头部旋转看向主角的操作,那么你的敌人会背对着打你,我们需要以下操作
五,让敌人精准打击主角
1.继续在我们的ai行为树里,创建一个task,蓝图基础的task,命名为BTTask_FocusTaget
2.打开后,创建一个变量,注意该变量的引用类型设置一下,我们还要选中该变量,在右侧细节栏,处把默认改为键或者输入英文keys,并勾选可编辑实例
编写以下蓝图时注意success要勾选
为了更好的设置敌人的转向,如果你的敌人是复制的其他角色的蓝图,那么你需要更改一下它的控制器
如果敌人打到我们,那么敌人应该要扫射一下周围才进行追玩家
六,敌人扫射周围的创建
1.还是像之前创建task那样,创建一个蓝图基础,命名为BTTask_ClearFocus,不在敌人视野范围时
我这是已经创建了的
2.打开该task后
3.回到行为树
加上这个task
七,添加武器——非ai行为树版
1.给角色上武器
2.创建该武器的actor蓝图,创建一个静态网格体,选择该武器资产网格体,还要改它的碰撞预设为nocolistion
3.打开敌人的角色蓝图,给敌人附加武器,注意class,还有武器插槽和位置
在事件开始运行调用事件,运行游戏试试
好的,我们只断开事件开始运行
八,添加武器——ai行为树版
1.再来到ai行为树,再创建一个task,命名为BTTask_WieldSword,我这已经创建了
2.打开后,编写以下蓝图,调用之前的事件WieldSword
3.回到行为树,链接该task
为了能在跑的时候,不攻击,攻击的时候不移动,这样就更好了
九,给BTTask_WieldSword创建一个装饰器
1.打开ai行为树
左上角创建一个装饰器,命名为BTDecorator_isWieldingSword
2.打开后,在函数重载一个执行条件检测AI
3.打开敌人的角色蓝图,创建一个布尔,是否挥舞武器
4.设置附加武器的条件
5.回到我们的装饰器蓝图
6.打开行为树,右键对应的武器task,添加装饰器
6.点击装饰器,右侧翻转条件,以判断武器挥舞是否为假
如果它挥舞失败了,sequence后面的就不会执行了,但我们只是想判断这个条件而已,这就需要用到我们的selector,上一篇讲过其用法
我们就需要加一个selector判断条件,无论是否为真假,后面的都执行,而唯有自己为真执行自己,为假,自己单独不执行
结束,我们运行一下