Navegación 3D en Tiempo Real

Introducción

La búsqueda de caminos en un entorno 3D es crucial para muchos juegos, es comúnmente la forma en que los personajes o entidades no controlados directamente encuentran su camino en un entorno. Godot proporciona varios nodos para este propósito:

Las regiones del mapa y navegación

El "mapa" es el mundo entero para la navegación, es similar al "espacio" para el motor de físicas. Está compuesto por regiones de navegación, estas regiones definen partes del mundo por las cuales los agentes de navegación pueden moverse.

Para crear una región de navegación, agrega el nodo NavigationMeshInstance a una escena 3D. A continuación, en el inspector de esa malla, crea o agrega un NavigationMesh. El navmesh contiene opciones para la generación cuando se realiza el proceso de horneado. Las opciones de geometría controlan qué nodos y tipos de nodos se utilizan para hornear la malla. Una descripción completa de cada configuración y cómo funciona se puede encontrar en la referencia de clase NavigationMesh.

Una vez que hayas configurado correctamente las opciones, presiona el botón "Bake NavMesh" en la parte superior del inspector para generarla.

../../_images/bake_navmesh.png

Nota

Once the settings have been properly configured, press the "Bake NavMesh" button at the top of the inspector to generate it.

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.

Los agentes de navegación pueden moverse de una región a otra si están una al lado de la otra. Además, un navmesh horneado puede moverse en tiempo de ejecución y los agentes aún podrán navegar sobre él desde otra región. Por ejemplo, navegar sobre una plataforma en movimiento que se haya detenido seguirá funcionando.

Procesamiento RVO

RVO significa "reciprocal velocity obstacle". El procesamiento RVO es una forma de búsqueda de caminos que tiene en cuenta otros agentes y cuerpos físicos en movimiento.

Para utilizarlo, establece un objetivo como lo harías normalmente. Luego, un agente debe obtener la siguiente ubicación de la ruta de navegación y calcular su velocidad hacia esa ubicación. En lugar de utilizar ese valor para moverse, utilízalo para establecer la velocidad en el agente con set_velocity. A continuación, se genera y emite una nueva velocidad que tiene en cuenta otros agentes y obstáculos mediante la señal velocity_computed.

Sin embargo, los agentes solo pueden tener en cuenta un número determinado de agentes cercanos. Esta propiedad se llama max neighbors<class_NavigationAgent_property_max_neighbors> y puede ajustarse. Sin embargo, esto no limita la cantidad de agentes que pueden utilizar una región de navegación al mismo tiempo.

Generando una ruta (metodo antiguo)

Este es el método antiguo para generar una ruta de navegación y será eliminado en Godot 4. Primero, agrega un nodo de navegación a la escena y luego agrega una instancia de malla de navegación como su hijo y configura una malla de navegación.

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.