【UE5.1】NPC人工智能——05 给NPC添加视觉感知

目录

前言

效果

步骤

一、添加视觉感知与感知刺激源

二、AI调试

三、NPC感知到玩家就跑向玩家

四、优化NPC反应

五、优化NPC速度


前言

在上一篇(UE5.1】NPC人工智能------04 NPC巡逻)中我们已经实现了NPC狮子巡逻功能,本篇我们要介绍的功能是给狮子添加视觉,让其看到玩家时就跑过来。

效果

步骤

一、添加视觉感知与感知刺激源

  1. 由于几乎所有NPC都需要视觉感知,因此我们直接在所有AI控制器的父类"BP_NPC_AIController"中添加一个AI感知组件

在感官配置中添加一个元素,该元素设置为"AI视力配置"

这里设置视线半径为1000,失去实现半径为1200,归属检测都开启,主导感官为"AISence_Sight"

  1. 为了让NPC狮子能感知到玩家角色,我们还需打开角色蓝图,然后添加一个AI感知刺激源组件

勾选"自动注册为源",添加一个注册为感官的源,选择"AISence_Sight"

二、AI调试

AI调试说明见官方文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/ai-debugging-in-unreal-engine

这里简要阐述一下,首先按引号键启用AI调试

通过按小键盘的数字键0、1、2、3、4键分别开启或关闭调试信息

当NPC狮子看到视觉刺激源后,会在场景中生成一个绿色的球,表示感知到的位置

绿色圆形表示NPC狮子的可视边界,粉色表示失去视线的边界

三、NPC感知到玩家就跑向玩家

  1. 回到AI控制器"BP_NPC_AIController"中,选中AI感知组件,然后添加一个"目标感知更新时"事件。

在事件图表中添加如下节点,首先判断是否成功感知,再判断感知到的actor是否为玩家角色

  1. 回到黑板"Blackboard_Lion"中,新建一个object类型变量

这里命名为"Target Character",表示NPC狮子看到的目标角色

该变量的键类型中的基类设置为玩家角色"BP_ThirdPersonCharacter"

  1. 回到AI控制器"BP_NPC_AIController"的事件图表中,添加如下节点。当成功感知时,将黑板中的变量"Target Character"设置为"BP_ThirdPersonCharacter",当失去感知时,将"Target Character"置空。

变量"Key_TargetCharacter"的变量类型为命名,默认值为"Target Character"

  1. 打开行为树"BT_Lion",添加一个"Selector(选择器合成节点)"

鼠标右键点击"Sequence"节点的上部,选择"添加装饰器-》Blackground"

选中装饰器,然后在细节面板中设置黑板键为"TargetCharacter"

此时只要黑板中的变量"TargetCharacter"没有被设置的时候,就会执行"Sequence"及其后续的内容,然后给"Selector"节点返回一个true。

如果黑板中的变量"TargetCharacter"被设置了(表示狮子NPC感知到了玩家),就让狮子移动到"TargetCharacter"

此时运行可以看到NPC狮子一开始在巡逻,当感知到玩家后就会跑向玩家

但是有一点问题,就是当NPC狮子跟上玩家后会穿过玩家,我们可以在行为树中选中"MoveTo"节点,然后增加"可接受半径"

如果想增加NPC狮子的感知半径,可以在AI控制器中调整

如果想提高狮子的转向速度,可以在"Character_Lion"的类默认值中提高旋转速率。

四、优化NPC反应

当前还存在的问题是,当狮子看见玩家后会经过一定的延迟后才跑向玩家。这是因为在行为树中"Sequence"节点会从左到右全部执行后才返回到"Selector",由于有"Wait"的存在,因此在"Sequence"中的每次执行都会耽搁一段时间。

我们需要先选中Sequence节点的装饰器然后设置"通知观察者"为"结果改变时","观察器中止"为"self",表示当黑板键"Target Character"改变时就中止Sequence执行回到Selector。

同样的,当NPC跟随玩家时失去感知后也应该中止跟随。

五、优化NPC速度

下面我们希望实现的功能是NPC在巡逻时的速度是缓慢的,发现玩家后跟随的速度要更快一些。

有两种方法,一种是我们可以在行为树中新建一个任务来设置NPC的速度,还有一种方法是通过新建服务实现,这里使用第2中方法。

  1. 点击"新建服务"

这里服务命名为"BTService_SetLionSpeed",表示用于设置狮子的速度

打开"BTService_SetLionSpeed",在事件图表中添加如下节点来修改狮子的行走速度

设置变量"MaxSpeed"为可编辑实例

  1. 回到行为树"BT_Lion",右键点击Sequence选择"添加服务-》BTService_SetLionSpeed"

选中服务"BTService_SetLionSpeed",在细节面板中设置"MaxSpeed"的值,这里设置为120。这样当狮子巡逻时的速度就是120

同样的方法设置狮子在跟踪时的速度为600

此时运行效果如下

相关推荐
心怀梦想的咸鱼14 小时前
UE5 第一人称射击项目学习(二)
学习·ue5
暮志未晚Webgl14 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
心怀梦想的咸鱼14 小时前
UE5 第一人称射击项目学习(完结)
学习·ue5
暮志未晚Webgl2 天前
110. UE5 GAS RPG 实现玩家角色数据存档
java·前端·ue5
Zhichao_973 天前
【UE5】Slider控件样式
ue5
流行易逝3 天前
23.UE5删除存档
ue5
心怀梦想的咸鱼3 天前
UE5 第一人称射击项目学习(三)
学习·ue5
流行易逝3 天前
22.UE5控件切换器,存档列表,
ue5
[小瓜]3 天前
高级AI记录笔记(三)
人工智能·笔记·学习·ue5·虚幻
心怀梦想的咸鱼4 天前
UE5 5.1.1创建C++项目,显示error C4668和error C4067
ue5