AI行为树实现随机和跟随移动
创建 Blackboard(黑板) 、Controller 、Behavior Tree(行为树) 、BluePrint


创建完成后
-
黑板:存储AI的变量
-
行为树:存储AI的逻辑
-
蓝图类:为AI的执行者
-
Controller:为AI的控制器

进入 AI_BB 添加 LookPlayer 、Coordinates 变量

进入 AI_Contorller 添加 AIPerception 组件

选中组件,在 细节 面板中找到 感官配置 并添加 AI视力配置

展开索引

-
视线半径:查看到目标之后通知多少范围内的AI -
失去视线半径:目标距离多远失去目标 -
次要视角半角角度:AI的视野角度 -
按归属检测:检测什么归属的目标(如果需要查看到玩家,需要勾选检测中立方)
选中 AIPerception 组件在 细节 面板中添加 目标感知更新时


-
Actor:返回AI看见的Pawn和角色 -
Stimulus:看到物体后返回的内容
从 Stimulus 处拖线添加 中断AIStimulus 节点,从执行流处添加 类型转换为 Player_BP 和 打印字符串 节点并连接

进入 AI_BP 蓝图类中 类默认值 > Pawn > AI控制器类 设置为创建的控制器

编译后运行


进入 AI_BT 行为树,从根添加节点
-
Selector:根据条件选择其中一个执行 -
Sequence:执行完第一条之后执行第二条以此类推

从根执行到 Selector 根据条件判定执行左边还是右边的 Sequence
右键 Sequence 序列节点 添加装饰器 > Blackboard

选中新增的 装饰器 ,在细节面板中更改值



注意:已设置代表 True ,未设置代表 Flase
在 细节 面板中将 观察器终止 调整为 Both

回到 AI_Controller 事件图表,将 打印字符串 节点删除,并添加 获取黑板 、创建文字命名 、将值设为布尔 、运行行为树

将 AI_BP 蓝图类事件图表中的所有节点删除

在 AI_BT 中新建基于 BTTask_BlueprintBase 的任务

将寻路逻辑添加进入新建的任务

回到 AI_BT 将创建的任务添加到其中,并添加 Wait 任务,在执行完毕时等待五秒

可以回到 AI_Controller 添加 事件开始运行 将运行行为树连接

在 FollowPlayer 中添加寻找玩家的逻辑

回到 AI_BT 添加寻找玩家的任务

编译后运行

但是如果转的快,会导致AI丢失目标。
回到 AI_BP 中 CharacterMovement 的 细节 面板中找到 角色移动(旋转设置) > 将旋转朝向移动 取消勾选

在 类默认值 中找到 使用控制器旋转 Yaw ,并勾选

在 FollowPlayer 事件图表中添加 设置焦距 节点

在 AIGetCoordinates 中添加 清除焦距 节点

注意

勾选了 使用控制器旋转 Yaw 之后,AI的旋转会跟随AI控制器的旋转
而当使用 设置焦距 之后,AI的旋转则会跟随玩家的方向
