实时导航(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

官方示例项目

There is an official example project on how to use 3D navigation. You can find the repository here. It can also be found in the asset library.