Mostrar más resultados
28330

Cómo construir un NavMesh en Unity 3D

Cómo construir un NavMesh en Unity 3D

Escrito por Jordi Mula

Uno de los grandes retos a la hora de realizar un videojuego puede ser el de enfrentarnos a la creación de una Inteligencia Artificial para nuestro juego, ya sea para crear enemigos o NPCs (personajes no jugables). Unity nos intenta poner fácil una parte en la creación de estos sistemas. La herramienta de NavMesh nos permite crear áreas de movimiento y nos facilita la creación de sistema de pathfinding (búsqueda de caminos). Veamos un poco en qué consiste y cómo funciona.

Navegación en Unity 3d

Como ya hemos mencionado Unity nos intenta poner fácil la navegación de los personajes de nuestro juego (ya sean enemigos, npcs o incluso nuestro propio personaje principal, como podría ser el caso de los juegos “click & move”, en los que se selecciona el punto del terreno a donde queremos que nuestro personaje se dirija). En escenas complejas Unity puede usar una versión lowpoly (baja en número de polígonos) de nuestra escena para realizar este tipo de cálculos, lo que no sólo automatiza estos movimientos si no que estos cálculos quedarían optimizados. Podemos acceder a las opciones del NavMesh a través del menú Window > Navigation.

NavMesh Baking

El NavMesh Baking es el cálculo de la escena para determinar el área del terreno en el que los personajes se podrán mover. Cada uno de los objetos que vayan a usar dicho NavMesh deberán poseer a su vez el componente “Navmesh Agent”. Una vez abierto el menú de Navigation, podremos ver tres pestañas (Object, Bake, Layers). Para que Unity pueda realizar el cálculo del NavMesh es importante indicarle que objetos no se van a poder mover, es decir, van a ser estáticos (como pueden ser paredes, muebles, árboles, etc). Para definir los objetos que queremos que sean estáticos debemos ir a la pestaña Objects, seleccionar todos aquellos objetos que nos interesen y marcarlos con la opción de “Navigation Static”.

En la pestaña de Layers podremos definir diferentes zonas dentro de nuestro NavMesh estas zonas tendrán definido un “Coste”, es decir una dificultad con la que moverse sobre ella. Esto nos ayudará a definir diferentes ambientes como puede ser una carretera o un camino enfangado, lo que provocará que nuestra IA se intente desplazar siempre por las zonas con menor dificultad y no por las otras que lo harían desplazarse más lentamente.

Por último la pestaña Bake será la pestaña donde realizaremos el cálculo final de nuestro NavMesh. Repasemos las diferentes opciones que podemos encontrar en esta pestaña para completar nuestro NavMesh. El parámetro “Radius” determina cuál será el espacio que se dejará entre el NavMesh y los objetos estáticos definidos en la pestaña Objects. “Height” define quan bajo el personaje puede pasar. “Max Slope” nos dice el valor máximo de inclinación que puede subir un personaje. “Step Height” equivale al valor del obstáculo más alto que se puede pasar para poder seguir caminando. Una vez definidos todos los parámetros de nuestro NavMesh, simplemente debemos clicar sobre la opción “Bake” y Unity se encargará de calcular toda el área sobre la que los personajes se podrán desplazar. Una vez calculada, Unity nos mostrará dicha área de un color azul sobre el terreno. Podemos mostrar esta representación u ocultarla con la opción “Show Navmesh”.

NavMesh Agent

Ya hemos mencionado antes que para que un objeto pueda desplazarse sobre el NavMesh tiene que tener el componente “NavMesh Agent”, además este componente necesita un objetivo hacia el que moverse, este objetivo lo podemos ir cambiando por código para ir modificando de manera dinámica hacia dónde queremos que nuestro personaje se desplace. Veamos las diferentes propiedades del componente que nos ayudarán a configurar a nuestro personaje. “Radius” es el radio de volumen que ocupa al personaje, sería similar a cuando definimos un “collider” para un objeto. “Height” indica la altura de nuestro personaje y nos sirve para ver por qué zonas de diferentes alturas nuestro personaje puede pasar. “Base Offset” con esta opción podemos modificar el centro de nuestro personaje en el eje Y, normalmente lo usaremos en función de donde se encuentre el pivote de nuestro modelo. “Speed” es la velocidad con la que el personaje se puede mover de un punto a otro. “Angular Speed” nos indica la velocidad con la que nuestro personaje puede girar para encarar el objetivo. “Acceleration” es el valor de aceleración para llegar a la velocidad máxima que hemos definido anteriormente. “Stopping Distance” representa la distancia respecto al objetivo a la que el personaje se parará y no seguirá avanzando. “Auto Braking” hará que nuestro personaje se frene en seco al llegar al objetivo y su último paso no pueda ir más allá de este.

Estos son las características principales de nuestro NavMesh y de nuestro Agent, en artículos posteriores veremos algunas propiedades más sobre el componente NavMesh Agent y cómo realizar zonas con saltos y obstáculos fijos o dinámicos. También veremos cómo crear un sistema de Pathfinding a través de esta herramienta.

¿Crees que el NavMesh es una herramienta útil y que te puede facilitar el trabajo? Déjanos tu comentario

Curso relacionado: Curso Superior de Diseño y Desarrollo de Videojuegos con Unity 3D