Version: 2018.4
Construyendo un Height Mesh (Mesh de altura) para una colocación precisa del personaje
Cargar Múltiples NavMeshes utilizando el Additive Loading

Áreas de Navegación y Costos

Las Navigation Areas definen qué tan difícil es caminar a través de un área especifica, las áreas con bajo costos serán preferidas durante un path finding (encuentra caminos). Adicionalmente, cada NavMesh Agent tiene un Area Mask que puede ser utilizado para especificar en qué áreas el agente puede moverse.

En el ejemplo de arriba los tipos de área son utilizados para dos usos de casos comunes:

  • El área Water es hecha más costosa para caminar al asignar un costo mayor, para tratar con un escenario dónde caminar en aguas poco profundas es más lento:
  • El área Door se hace accesible por caracteres específicos, para crear un escenario dónde los humanos puedan caminar a través de paredes, pero los zombies no.

El tipo de área puede ser asignado a todos los objetos que son incluidos en el NavMesh baking, en adición, cada Off-Mesh Link tiene una propiedad para especificar el tipo de área.

Costo de Pathfinding (Encontrar caminos)

En pocas palabras, el costo le permite a usted controlar qué areas el pathfinder (encuentra caminos) favorece cuando encuentre un camino. Por ejemplo, si usted configura el costo de una área a 3.0, viajar a través de esta área es considerado tres veces mayor que otra ruta alterna.

Para entender completamente cómo funciona el cost, echemos un vistazo a cómo el pathfinder (encuentra caminos) funciona.

Nodos y enlaces visitados durante el pathfinding.
Nodos y enlaces visitados durante el pathfinding.

Unity usa A* para calcular la ruta más corta en NavMesh. A* trabaja en una gráfica de nodos conectados. El algoritmo comienza desde el nodo más cercano al inicio de la ruta y visita los nodos de conexión hasta que se alcanza el destino.

Debido a que la representación de Unity es un mesh de polígonos, la primera cosa que el pathfinder necesita hacer es colocar un punto en cada polígono, que es la ubicación del nodo. El camino más corto es luego calculado entre estos nodos.

Los puntos y líneas amarillos en la imagen de arriba muestran cómo se colocan los nodos y los enlaces en NavMesh, y en qué orden se recorren durante la A*.

El costo de moverse entre dos nodos depende de la distancia a recorrer y el costo asociado con el tipo de área del polígono debajo del enlace, es decir, distance * cost. En la práctica, esto significa que si el costo de un área es 2.0, la distancia a través de dicho polígono parecerá ser el doble. El algoritmo A* requiere que todos los costos deben ser mayores que 1.0.

El efecto de los costos del camino resultante puede ser difícil de afinar, esencialmente para unos caminos mayores. La mejor manera de acercar costos es tratarlos como pistas. Por ejemplo, si usted quiere que los agentes no utilicen Off-Mesh links a menudo, usted puede aumentar sus costos. Pero puede ser un desafio para afinar un comportamiento dónde los agentes prefieren caminar en las aceras.

Otra cosa que usted puede notar en algunos niveles es que el pathfinder no siempre escoge el camino más corto, La razón para esto es la colocación de nodo. El efecto puede verse en escenarios dónde hay las grandes áreas están alado de obstáculos pequeños, que resulta el mesh de navegación con polígonos muy grandes y pequeños. En tales casos, los nodos en los polígonos más grandes pueden ser colocados en cualquier parte en el polígono grande y desde el punto de vista del pathfinder (encuentra camino) se ve como un desvío.

El cost (costo) por area type (tipo de área) puede configurarse globalmente en la pestaña Areas, o usted los puede anular por agente utilizando un script.

Tipos de Área

El tipo de áreas son especificadas en la pestaña Areas en la Navigation Window. Dónde hay 29 tipos personalizados, y 3 tipos integrados: Walkable, Not Walkable, y Jump.

  • Walkable es un área genérico que especifica que el área puede ser caminada.
  • Not Walkable es un tipo de área genérico que previene la navegación. Es útil para casos dónde usted quiere marcar cierto objeto en ser un obstáculo, pero sin hacer que el NavMesh esté encima de ello.
  • Jump es un tipo de área que es asignado a todos los Off-Mesh Links auto-generados.

Si varios objetos de diferentes tipos de área se superponen, el tipo de área navmesh resultante será generalmente el que tenga el índice más alto. Hay una excepción: No Walkable siempre tiene prioridad. Que puede ser útil si necesita bloquear un área.

Area Mask

Cada agente tiene un Area Mask que describe qué áreas puede utilizar cuando navegue. El area mask pueden configurarse en las propiedades del agente, o el bitmask puede ser manipulado utilizando un script en tiempo de ejecución.

El area mask es útil cuando usted quiere que ciertos tipos de personajes sean capaz de caminar a través de un área. Por ejemplo, en un juego de evasión zombie, usted puede marcar el área debajo de cada puerta con el area type (tipo de área) Door, y no marque el área Door del Area Mask del personaje zombie.

Lecturas Adicionales

Construyendo un Height Mesh (Mesh de altura) para una colocación precisa del personaje
Cargar Múltiples NavMeshes utilizando el Additive Loading