实时导航(3D)

前言

Godot 针对 3D 环境中的实时导航的实现提供了两个节点:NavigationNavigationMeshInstance

导航网格(NavigationMesh)由导航网格实例(NavigationMeshInstance)持有 ,用于定义场景中的可导航区域。导航(Navigation)节点根据导航网格进行寻路。

设置导航

要在场景中加入导航功能,你需要添加一个导航节点,然后为导航节点添加导航网格实例作为子节点。选中导航网格实例后,再在检查器中新建导航网格。

../../_images/new_navigation_mesh.png

点击导航网格后,你就可以通过调整其属性来控制导航网格的生成方式。你可以在 NavigationMesh 的类参考手册中找到每个属性的完整说明。

调整完后,就可以点击工具栏上的烘焙导航网格来生成网格。

../../_images/bake_navmesh.png

网格生成完后,你就能在场景中可以进行导航的位置上方看到半透明的导航网格了。

../../_images/baked_navmesh.png

请注意,导航网格显示的是实体中心点所能到达的位置。例如,如果你将 agent radius 设为 0.5,那么你的导航网格与台阶或者墙壁之间就会有 0.5 的距离,防止穿进墙壁或从边缘掉下。

生成路径

要在地图上获取两个区域之间的路径,你可以使用导航节点的 get_simple_path() 方法。第一个参数是表示起始位置的 Vector3,接下来是表示结束位置的 Vector3。最后一个参数是一个布尔值,表示是否需要在生成路径时考虑 agent 属性。

该方法返回的是一个 PoolVector3Array,由路径上的点组成。如果无法导航至结束位置,该方法会返回一个空 PoolVector3Array

官方示例项目

官方有针对如何使用 3D 导航的示例项目,仓库在这里,在素材库中也能找到。