Choose your operating system:
Windows
macOS
Linux
概述
虚幻引擎的 寻路系统 允许代理使用 寻路网格体 寻路,以在关卡中寻路。除了寻路网格体的各种 运行时生成 方法之外,该系统还包含仅在特定目标周围本地构建寻路的方法。
寻路调用程序(Navigation Invokers) 是在运行时在代理周围生成寻路网格体的蓝图Actor组件。使用寻路调用程序,就无需在编辑器中构建寻路网格体,并且还可以限制在运行时生成的图块数。
寻路调用程序非常适合大型关卡,因为在编辑器中构建寻路网格体不切实际。
目标
在本指南中,你会学习将寻路调用程序用于代理,在游戏过程中生成寻路网格体。
任务
创建新的关卡,并配置寻路系统以使用寻路调用程序。
将ThirdPersonCharacter蓝图修改为使用寻路调用程序在关卡中四处游走。
1 - 必要设置
在菜单的 新建项目类别(New Project Categories) 分段中,选择 游戏(Games),然后点击 下一步(Next)。
选择 第三人称(Third Person) 模板,然后点击 下一步(Next)。
选择 蓝图(Blueprint) 和 无初学者内容包(No Starter Content) 选项,然后点击 创建项目(Create Project)。
阶段成果
你已创建新的第三人称项目,现在可以开始学习寻路调用程序。
2 - 创建测试关卡
点击菜单栏中的 文件(File) > 新建关卡(New Level)。
选择 默认(Default) 关卡。
在 世界大纲视图(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 Browser) 中,右键点击并选择 新建文件夹(New Folder),以新建文件夹。将文件夹命名为 NavigationSystem。
在 内容浏览器中,转到 ThirdPersonBP > 蓝图(Blueprints),然后选择 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键以可视化寻路网格体。
阶段成果
在本小节中,你创建了一个在关卡中四处游走的代理,并使用"寻路调用程序"组件在代理自身周围构建了寻路网格体。