UE5 - AI移动功能实现教程1(附:自动寻路到随机地点)
作者:hangge | 2026-07-23 09:11
行为树是 Unreal Engine 5 中的用于设计 AI 的系统,也是一个树状图,可以在控制器中被运行,AI 会根据树状图的不同条件执行不同的功能。本文将从零开始,讲解如何在 UE5 中配置并使用行为树,使 AI 角色能够自动寻路到随机地点。













(3)依次添加“MoveTo”节点和“Wait”节点。
















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

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

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

(4)“黑板”是一个非常形象的概念,AI 在运行时会接收各种各样的信息,并可以将信息存入变量,而“黑板”可以存储行类树中要便用变量。就像可以使用粉笔在黑额上记录信息一样,在行为树的“黑板”中可以实时查询或重写记录的信息。
提示:
- 最好为每个行为树都添加一个黑板、可以在“细节”商板中打开“BehviorTree”卷展栏,通过“黑板资产”来替换黑板。
- 在行为树中新建的黑板会自动设置在行为树中,如果是在“内容议览器”面板中通过执行“人工智能>黑板”菜单命令剑建的黑板,则需要手动没置到行为树中,否则行为树的“黑板资产”为空。
2,创建寻路任务
(1)可以使用任务让蓝图执行一些功能,新建任务就相当于使用蓝图制作一个 AI 行为树的节点、单击工具栏中的“新建任务”按钮。

(2)在“资产另存为”对话框中设置“命名”为“Task_RandomLocation”后单击“保存”。该任务的作用是计算一个随机移动的值后,将值记录在黑板上,接着在行为树中使用“Move To” 节点移动角色到黑板上的值中。这就是随机移动的核心思想,也是行为树的基本运作原理。

(3)进入“Task_RandomLocation”蓝图,在“我的蓝图”面板中单击“函数”右侧的“重载”按钮,可以看到有很多函数可供使用,例如:
- “接收执行 AI” 函数会让行为树在执行当前任务所在蓝图时调用此函数,从而执行任务。
- “接收 Tick AI”函数的作用与“事件 Tick”相同,在被创建后会持续被脉冲调用。

(4)创建“接收执行 AI”节点,可以看到此节点有两个引脚:
- 一个是“Owner Controller”,用于显示该行为树目前在哪个控制器上运行。
- 另一个是“Controlled Pawn”,用于显示该行为树当前控制哪个 Pawn,也可以理解为控制哪个角色。

(5)拖曳“Controlled Pawn”引脚到空白处,使用“获取 Actor 位置”节点得到 AI 的位置,如果希望让 AI 随机移动到以自身位置为起点的 2000 个单位内的任意点处,可以使用“获取半径内可抵达的随机点”节点,连接“Origin”引脚到“获取 Actor 位置”节点,设置“Radius”为 2000.0。接着添加“将黑板值设为向量”节点,连接“Value”引脚与“Random Location”引脚。

(6)拖曳“将黑板值设为向量”节点的“Key”引脚到空白处,执行“提升为变量”菜单命令新建一个变量。
提示:因为需要设置黑板上的某个 Key 为返回的随机位置,所以需要一个 Key 变量,在行为树中手动设置这个 Key 为黑板中暂时存储随机位置的变量。这样行为树在使用此节点时,此节点就知道设置黑板中的哪个变量为随机位置了。
- 在“细节”面板中勾选“可编辑实例”选项。完成后编译并保存蓝图。

(7)在“将黑板值设为向量”节点后连接“完成执行”节点,勾选“Success”选项。这样此蓝图就执行完毕了,如果不进行这一步,行为树会卡在这个蓝图中,不执行后续命令。

3,设置黑板数据键
打开“BB_AI”黑板,单击“新键”按钮新建一个“向量”黑板键并命名为“MoveLocation”。单击“保存”按钮保存黑板。
提示:黑板种默认就已经有一个条目叫 SelfActor,表示运行该行为树的主体(如果是 AI 机器人运行的这个行为树,那么“主体”指定就是机器人)

4,设置行为树逻辑
(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”节点下方的接口到空白处,新建一个子节点“Task_RandomLocation”
- 选择“Task_RandomLocation”节点,在“细节”面板中设置“Key”为“MoveLocation”。这样将“MoveLocation”向量传入“Key”后可以在执行节点时通过蓝图设置该向量的参数。

- “Move To”节点可以让控制的角色移动到某一位置。选择“Move To”节点,在“细节”面板中设置“黑板键”为“MoveLocation”。这样“MoveTo”节点就会将角色移动到计算好的位置。
- 选择“Wait”节点,在“细节”面板中设置“等待时间”为 5.0。增大“等待时间”可以让每次执行的间隔时间延长,等待时间太短会导致 AI 反复计算新的移动位置,影响效果。完成后单击“保存”按钮医指保存行为树。

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

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

6,创建 AI 角色蓝图
(1)因为这里需要为人物模型添加一个人形 AI 所以新建一个“角色”类蓝图并命名为“AI”。这个“角色”类蓝图就可以作为 AI。
提示:如果只需要制作一个人形 AI,那么“角色”类蓝图是最好的选择。如果要制作非人形 AI,那么“Pawn”类蓝图是最好的选择。
(2)双击打开“AI”蓝图后在“组件”面板中选择“网格体(CharacterMesh0)”,在“细节”面板中设置“骨骼网格体"为“SK_Mannequin”。

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

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

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

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

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

8,运行测试
(1)进入 SIE 运行模式,可以看到 AI 会自动移动到随机位置。

(2)并且移动到目标位置后,等待 5 秒后会继续移动。

附:使用服务节点来获取随机移动的目标位置
1,实现原理
(1)上面样例中我们创建了一个寻路任务“Task_RandomLocation”来计算一个随机移动的值,并将值记录在黑板上,供后续的 MoveTo 任务节点使用。
(2)其实我们也可以创建一个服务节点来实现同样功能,然后将这个服务节点附着在 MoveTo 任务节点上,在 MoveTo 任务开始执行之前获取需要移动到的位置并写入黑板条目。
2,实现步骤
(1)打开 AI 行为树,点击“新建服务”按钮继承“Service_BlueprintBase”创建一个服务,然后将该服务命名为“BTS_RandomLocation”

(2)进入“BTS_RandomLocation”蓝图,在“我的蓝图”面板中单击“函数”右侧的“重载”按钮,创建“接收启用 AI”节点。

(3)新建一个“黑板键选择器”类型的变量“Key”,并勾选上其“可编辑实例”

(4)然后该服务蓝图中的逻辑同之前任务蓝图逻辑大体相同。

(5)打开“BT_AI”行为树,删除原先的“Task_RandomLocation”任务节点。右键点击 MoveTo 节点,在弹出菜单中点击“添加服务”,选择我们刚刚创建的寻路服务“BTS_RandomLocation”
- 选择“BTS_RandomLocation”节点,在“细节”面板中设置“Key”为“MoveLocation”。这样将“MoveLocation”向量传入“Key”后可以在执行节点时通过蓝图设置该向量的参数。

(6)进入 SIE 运行模式,可以看到 AI 同样会自动移动到随机位置。并且移动到目标位置后,等待 5 秒后会继续移动。

全部评论(0)