Real Time Navigation (3D)

Introducción

Godot provides two nodes which can be used to achieve real time navigation in a 3D environment, Navigation and NavigationMeshInstance.

A navigation mesh instance is used to hold a NavigationMesh, which defines what areas in a scene can be navigated to. The Navigation node is then used for pathfinding with the navigation mesh.

Configurando la navegación

Para agregar navegación a una escena necesitas agregar un nodo navegación, después una instancia de malla de navegación como hijo del nodo navegación. Con la instancia de la malla de navegación seleccionada necesitas ir al inspector y crear una nueva malla de navegación.

../../_images/new_navigation_mesh.png

Clic en la malla de navegación y ahora puedes modificar las propiedades que definen como es generada la malla de navegación. Puedes encontrar una descripción para cada una de las propiedades en la clase de referencia, aquí: NavigationMesh.

Después de hacer los cambios que quieres en la malla puedes generarla haciendo clic en Bake NavMesh dentro de la barra de herramientas.

../../_images/bake_navmesh.png

Una vez que la malla ha terminado de generarse deberías ver la malla de navegación transparente encima de las áreas de tu escena a las que puedes navegar.

../../_images/baked_navmesh.png

Tener en cuenta que la malla de navegación muestra donde puede ir el centro de una entidad. Por ejemplo, si establece el agente radio a 0.5 entonces su malla de navegación va a tener una distancia de 0.5 desde cualquier repisa o pared para evitar que se enganche en la pared o cuelgue del borde.

Generando una ruta

Para obtener una ruta entre dos áreas en un mapa usas el método del nodo de navegación get_simple_path(). El primer argumento es un Vector3 de la ubicación inicial, el próximo es un Vector3 de la ubicación final. Y el último argumento es un valor booleano para determinar si las propiedades del agente de una malla de navegación se consideran o no al generar una ruta.

El método va a retornar una PoolVector3Array que consiste de puntos para hacer la ruta. Sí no hay manera de navegar hasta la ubicación final el método va a retornar un PoolVector3Array. en blanco.

Proyecto de ejemplo oficial

Hay un proyecto de ejemplo oficial de como usar la navegación 3D. Puedes encontrar el repositorio aquí. También puede encontrarse en la biblioteca de activos.