概述
虚幻引擎的 寻路系统 允许代理使用 寻路网格体 寻路,以在关卡中寻路。除了寻路网格体的各种 运行时生成 方法之外,该系统还包含仅在特定目标周围本地构建寻路的方法。
寻路调用程序(Navigation Invokers) 是在运行时在代理周围生成寻路网格体的蓝图Actor组件。使用寻路调用程序,就无需在编辑器中构建寻路网格体,并且还可以限制在运行时生成的图块数。
寻路调用程序非常适合大型关卡,因为在编辑器中构建寻路网格体不切实际。
目标
在本指南中,你会学习将寻路调用程序用于代理,在游戏过程中生成寻路网格体。
任务
-
创建新的关卡,并配置寻路系统以使用寻路调用程序。
-
将ThirdPersonCharacter蓝图修改为使用寻路调用程序在关卡中四处游走。
1 - 必要设置
-
在虚幻项目浏览器的 新建项目类别(New Project Categories) 分段中,选择 游戏(Games)> 第三人称(Third Person) 模板。
-
选择 蓝图(Blueprint) 和 无初学者内容包(No Starter Content) 选项,然后点击 创建(Create)。
阶段成果
你已创建新的第三人称项目,现在可以开始学习寻路调用程序。
2 - 创建测试关卡
-
点击菜单栏中的 文件(File) > 新建关卡(New Level)。
-
选择 基础(Basic) 关卡。
-
在 世界大纲视图(World Outliner) 中,选择 Floor 静态网格体Actor,并转到 细节(Details) 面板。将 缩放 设置为X = 100、Y = 100、Z = 1。
-
点击 设置(Settings) > 项目设置(Project Settings),并转到 寻路系统(Navigation System) 类别。启用 仅在寻路调用程序周围生成寻路(Generate Navigation Only Around Navigation Invokers) 复选框。
-
转到 寻路网格体(Navigation Mesh) 类别,并向下滚动到 运行时(Runtime) 分段。点击 运行时生成(Runtime Generation) 下拉列表并选择 动态(Dynamic)。
-
转到 放置Actor(Place Actors) 面板,搜索 寻路网格体边界体积(Nav Mesh Bounds Volume)。将其拖入关卡,放置在地板网格体上。将 寻路网格体边界体积(Nav Mesh Bounds Volume) 缩放为X = 500、Y = 500、Z = 10。
阶段成果
在本分段中,你创建了新的关卡,并配置了寻路系统以使用寻路调用程序。
3 - 创建代理
-
在 内容侧滑菜单(Content Drawer) 中,右键点击并选择 新建文件夹(New Folder),以新建文件夹。将文件夹命名为 NavigationSystem。
-
在 内容侧滑菜单 中,找到 ThirdPerson > 蓝图(Blueprints),然后选择 BP_ThirdPersonCharacter 蓝图。将其拖到 NavigationSystem 文件夹中,并选择选项 复制到此处(Copy Here)。
-
找到 NavigationSystem 文件夹并将蓝图重命名为 BP_NPC_Invoker。双击打开蓝图类,然后找到 事件图表(Event Graph)。选择所有输入节点并将其删除。
-
右键点击 事件图表(Event Graph),然后搜索并选择 添加自定义事件(Add Custom Event)。将事件命名为 MoveNPC。
-
右键点击 事件图表(Event Graph),然后搜索并选择 获取Actor位置(Get Actor Location)。
-
从 GetActorLocation 节点拖出,然后搜索并选择 获取半径内的随机可达点(Get Random Reachable Point In Radius)。将 半径(Radius) 设置为1000。
-
从 GetRandomReachablePointInRadius 节点的 随机位置(Random Location) 引脚拖出,然后选择 提升到变量(Promote to Variable)。
-
将 MoveNPC 节点连接到刚才创建的 RandomLocation 节点。
-
右键点击 事件图表(Event Graph),然后搜索并选择 AI移动至(AI Move To)。将 RandomLocation 节点连接到 AI Move To 节点。
-
右键点击 事件图表(Event Graph),然后搜索并选择 获取对自身的引用(Get a reference to self)。
-
将 Self 节点连接到 AI Move To 节点的 Pawn 引脚。将 Random Location 节点的 黄色 引脚连接到 AI Move To 节点的 目的地(Destination) 引脚,如下所示。
-
从 AI Move To 节点的 成功时(On Success) 引脚拖出,然后搜索并选择 延迟(Delay)。将节点 的 时长(Duration) 设置为4。从 Delay 节点的 已完成(Completed) 引脚拖出,然后搜索并选择 MoveNPC,如下所示。
-
重复上述步骤,以将这些节点添加到 AI Move To 节点的 失败时(On Fail) 引脚。将 Delay 节点的 时长(Duration) 设置为0.1。
-
右键点击 事件图表(Event Graph),然后搜索并选择 事件开始播放(Event Begin Play)。从 Event Begin Play 节点拖出,然后搜索并选择 MoveNPC。
-
转到 组件(Components) 选项卡,点击 添加组件(Add Component) 下拉列表,然后搜索并选择 寻路调用程序(Navigation Invoker)。
-
选择 寻路调用程序(Navigation Invoker) 组件之后,转到 细节(Details) 面板,并查找 寻路(Navigation) 分段。此处,你可以更改 图块生成半径(Tile Generation Radius)(用于生成寻路网格体图块的Actor周围的半径)和 图块移除半径(Tile Removal Radius)(用于移除寻路网格体图块的Actor周围的半径)。对于本示例,分别将这些值设置为 3000 和 5000。
-
编译(Compile) 并 保存(Save) 蓝图。
-
将多个 BP_NPC_Invoker 蓝图拖到关卡中,并点击 模拟(Simulate) 以查看寻路在每个代理周围的生成情况。
如果看不到寻路,请按键盘上的P键以可视化寻路网格体。
阶段成果
在本小节中,你创建了一个在关卡中四处游走的代理,并使用"寻路调用程序"组件在代理自身周围构建了寻路网格体。