返回 导航

UE5

hangge.com

UE5 - AI移动功能实现教程2(附:在预设的巡逻点之间移动)

作者:hangge | 2026-07-24 08:55
    我在前文中演示了如何使用 AI 行为树实现 AI 角色自动寻路到随机地点(点击查看),本文接着演示如何实现 AI 角色的定点巡逻功能。为了实现这一功能,我们需要在地图上创建敌人将导航到的点,然后设置其行为,使敌人在巡逻点之间进行循环移动。 

二、在预设的巡逻点之间移动

1,创建行为树与黑板

(1)在“内容浏览器”面板中的空白处单击鼠标右键,执行“人工智能>行为树”菜单命令,新建一个行为树并命名为“BT_AI2

(2)打开“BT_AI2”行为树,图表正中心的“根”是行为树的起点,在右侧有“细节”和“黑板”两个面板,单击工具栏中的“新建黑板”按钮面新建黑新建一个黑板。

(3)在弹出的“资产另存为”对话框中设置“命名”为“BB_AI2”后单击“保存”按钮保存。

2,设置黑板数据键

(1)打开“BB_AI2”黑板,单击“新键”按钮新建一个“Object”类型的黑板键并命名为“CurrentPatrolPoint”,用于存储当前的巡逻点。

(2)接着在“黑板细节”面板中单击“键类型”左侧的展开箭头,然后单击“基类”右侧的下三角按钮,在列表中选择 Actor 选项。

3,设置行为树逻辑

(1)打开“BT_AI”行为树,拖曳“根”下方的接口到空白处打开“新建节点”面板,其中的“Selector”是选择器,“Sequence”是序列,两者都是较为常用的节点。
  • Selector”节点会从左到右执行,并检测所有子节点是否执行成功,也就是检测是否返回“True”,一旦有一个节点执行成功(返回“True”),那么选择器将会停止对后续节点的执行,选择器本身会返回“True”。如果所有节点都执行失败,则选择器返回“False”。返回的值可以由更靠近“根”的父项层的选择器进行判断。如果“PlaySound”节点执行成功,则后续的“Wait”节点和第 2 个“PlaySound”节点都不会再执行。如果第 1 个“PlaySound”节点投行失败,则会救行“Wait”节点,以此类推。
  • Sequence”节点会从左到右执行所有的子节点,不会因执行成功或失败而产生一定后果。先执行“Wait”节点,“Wait”节点会迫使序列暂停 5 秒,暂停 5 秒后执行“Play Animation” 节点。

(2)这里我们新建一个“Sequence”节点。因为希望此 AI 从左到右依次执行,所以该节点非常适合。拖曳“Sequence”节点下方的接口到空白处,依次添加“MoveTo”节点和“Wait”节点。

(3)“Move To”节点可以让控制的角色移动到某一位置。选择“Move To”节点,在“细节”面板中设置“黑板键”为“CurrentPatrolPoin”。这样“MoveTo”节点就会将角色移动到该巡检点位置。

(4)选择“Wait”节点,在“细节”面板中将“等待”类别中的“等待时间”设置为 3.0,即在巡逻之间增加 3 秒的暂停时间。将“随机偏差”设定为 1.0,添加 1 秒的变化。这将导致 24 秒之间的随机长度的暂停。完成后单击“保存”按钮保存行为树。

4,创建 AI 控制器

(1)新建一个蓝图,在“选取父类”对话框中选择“AIControllerAI 控制器)”,单击“选择”按钮,这样就可以类通过继承“AIController”创建一个子对类,将其命名为“BP_AIController2

(2)只有在控制器中运行对应的行为树,控制器才可以控制角色执行行为树中的操作。打开“BP_AIController2” 控制器,在“事件开始运行”节点后连接“运行行为树”节点,设置“BTAsset”为“BT_AI2”。完成后编译并保存控制器。

5,创建 AI 角色蓝图

(1)因为这里需要为人物模型添加一个人形 AI 所以新建一个“角色”类蓝图并命名为“AI_Character”。这个“角色”类蓝图就可以作为 AI
提示:如果只需要制作一个人形 AI,那么“角色”类蓝图是最好的选择。如果要制作非人形 AI,那么“Pawn”类蓝图是最好的选择。

(2)双击打开“AI”蓝图后在“组件”面板中选择“网格体(CharacterMesh0)”,在“细节”面板中设置“骨骼网格体"为“SK_Mannequin”。

(3)修改网格体组件的“变换”参数,设置“位置”为(X:0.0Y:0.0Z:-88.0),“旋转”为(X:0.0°Y:0.0°Z:-90.0°),使得角色朝向蓝色箭头所指的方向。

(4)在“细节”面板中设置“动画类”为之前下载的资源包里的“ThirdPerson_AnimBP

(5)选择“AI(自我)”组件后在“细节”面板中设置“AI 控制器类”为“BP_AIController2”。让“角色”类蓝图默认的控制器为新建的控制器,这样就可以在控制器中运行行为树。完成后编译并保存蓝图。

6,设置 AI 角色蓝图变量

(1)打开前面创建的 AI 角色蓝图“AI_Character”,假设我们一共有两个巡检点。首先在“我的蓝图”面板的“变量”类别中,单击加号按钮添加变量并将其命名为“PatrolPoint1”。然后在“细节”面板中,单击“变量类型”下拉按钮,然后搜索“Actor”。将光标悬停在 Actor 上,选择子菜单中的“对象引用” 选项。然后勾选“可编辑实例”复选框。

(2)按照相同的步骤创建第二个名为 PatrolPoint2 的变量,设置“变量类型”也为 Actor。 

(3)创建另一个 Actor 类型的变量 CurrentPatrolPoint,取消勾选该变量的“可编辑实例”复选框。 

(4)最后,我们还要创建一个名为 PatrolPointKeyName 的变量,并将“变量类型”更改为“命名”。编译蓝图后将“默认值” 设置为 CurrentPatrolPoint。用于表示对于的黑板键,防止后面使用时拼写错误。

(5)这样我们就创建好了所有需要的变量:

7,编写 AI 角色蓝图逻辑

(1)首先我们需要编写一个宏来更新 BB_AI2CurrentPatrolPoint 键,因为这个键将在多个地方使用。 在“我的蓝图”面板中,单击“宏”类别中的加号按钮以创建宏。将宏的名称更改为 UpdatePatrolPointBB

(2)在宏的“细节”面板中,创建名为 In 的输入参数和名为 Out 的输出参数,这两个参数的类型均为“执行”。

(3)然后添加如下节点逻辑:

(4)接着切换到“事件图表”,在 Event BeginPlay 事件中,我们将初始巡逻点设置为 CurrentPatrolPoint,并调用 UpdatePatrolPointBB 宏。

(5)最后,我们将使用 Event ActorBeginOverlap 事件来验证 BP_Character 实例何时到达两个巡逻点中的一个,然后交换该实例正在移动的巡逻点。每次更新 CurrentPatrolPoint 变量时,都需要调用 UpdatePatrolPointBB 宏。 

8,创建导航网格

(1)进入关卡,在“放置 Actor”面板中放置一个“NavMeshBoundsVolume”区域,该区域可以让 AI 在导航系统中实现移动、寻路和计算等功能。按 P 键可以观察该区域的影响范围。设置该区域的“缩放”参数,使其影响范围变得更大。

(2)拖曳“AI_Character”蓝图到区域中。

9,设置巡逻点

(1)我们将使用球体触发器来表示巡逻点,因为它会生成重叠事件,并隐藏在游戏中。我们需要在关卡上创建至少两个巡逻点,因为 BP_Character 的每个实例都可以在两个巡逻点之间导航。 

(2)在关卡编辑器中,单击位于工具栏上的“快速添加到项目”按钮,在菜单中将光标悬停在“所有类”上,在子菜单中选择“触发球体”命令。

(3)然后将球体触发器放置在地板上的任何地方。 并在“细节”面板中,将创建的触发球体重命名为“PatrolPoint1”。 

(4)根据相同的方法创建另一个触发球体,并将其命名为“PatrolPoint2”。把它放在远离第个巡逻点的地方,这样两点之间的移动就很明显了。

(5)最后,在关卡编辑器中,选择我们放置在关卡中的 BP_Character 实例。 在“细节”面板中,展开“默认” 类别,单击 PatrolPoint1 下三角按钮,在列表的搜索框中输入并添加 PatrolPoint1 实例。用同样的方法将 Patrol Point2 设置为 PatrolPoint2 实例。

10,运行测试

(1)进入 SIE 运行模式,可以看到 AI 角色会自动自动开始导航到两个巡逻点中的第一个。

(2)当它到达第一个巡逻点时,会短暂停顿,然后开始步行到第二个巡逻点。在游戏运行期间,这种模式将继续来回运行。 
评论

全部评论(0)

回到顶部