学习笔记,仅供参考!
1、创建了一个新的第三人称项目,重命名为navsystem1.
2、将使用 寻路网格体边界体积(Navigation Mesh Bounds Volume) 来指定关卡中需要生成寻路的区域。代理将使用此信息在关卡中到达目的地。搜索 寻路网格体边界体积(Nav Mesh Bounds Volume),并将其拖到关卡中。
选择 寻路网格体边界体积(Nav Mesh Bounds Volume) 之后,转到 细节(Details) 面板,将 体积 缩放为X=20、Y=20和Z=5。移动体积使其覆盖整个播放区域,如下所示。
在 世界大纲视图(World Outliner) 窗口中选择 ThirdPersonCharacter 蓝图,并将其从关卡中移除。
按键盘上的 P 键,可视化关卡中的寻路网格体。如下图所示,寻路网格体默认显示为绿色。
将寻路网格体边界体积Actor添加到关卡或调整其大小后,虚幻引擎会自动生成寻路网格体。
注意寻路网格体在楼梯上无法正确绘制。出现这种况是因为,寻路网格体是关卡中碰撞体的简化呈现。在 世界大纲视图(World Outliner) 窗口中选择 RecastNavMesh-Default Actor,
然后前往 细节(Details) 面板。前往 显示(Display) 分段,并将 绘制偏移(Draw Offset) 值设置为 50。此操作可调整绘制寻路网格体的高度偏移,以提高可读性。
选择 RecastNavMesh-Default Actor,转到 细节(Details) 面板并向下滚动到 显示(Display) 分段。这里你将找到各种选项,可以更好地可视化生成的寻路网格体。在下面的示例中,我选择了 绘制多边形边缘(Draw Poly Edges) 来查看构成网格体的多边形。
视口变为
你还可以启用 绘制区块边界(Draw Tile Bounds) 复选框来可视化各个寻路区块。
你可以前往 生成(Generation) 分段,更改其选项来修改寻路网格体的生成方式。
3、将创建一个简单的代理,通过选择附近的随机位置并走到该位置,该代理将在你的关卡中游走。代理到达目的地后将等待几秒钟,然后再次重复该过程。
在 内容浏览器(Content Browser) 中,右键点击并选择 新建文件夹(New Folder),以新建文件夹。将文件夹命名为 NavigationSystem。
在 内容浏览器中,转到 ThirdPersonBP > 蓝图(Blueprints),然后选择 ThirdPersonCharacter 蓝图。将其拖放到 NavigationSystem 文件夹,然后选择选项 复制此处(Copy Here)
转到 NavigationSystem 文件夹,并将该蓝图重命名为 BP_NPC_NavMesh。双击打开蓝图类,然后找到 事件图表(Event Graph)。选择所有输入节点并将其删除。
右键点击 事件图表(Event Graph),然后搜索并选择 添加自定义事件(Add Custom Event)。将事件命名为 MoveNPC。
搜索并选择 获取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)。
从 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。
编译(Compile) 并 保存(Save) 蓝图。将你的 BP_NPC_NavMesh 蓝图拖到你的关卡,并点击 模拟(Simulate)。你应该会看到你的代理在关卡中游走。
注意事件开始运行时调用的Move Npc是自己定义的自定义事件。