Mostrar más resultados
28495

Construcción de un NavMesh en Unity

Construcción de un NavMesh en Unity

Escrito por Jordi Mula

Dentro de las posibilidades que podemos encontrarnos cuando diseñamos o programamos un videojuego es la crear interacciones con otros personajes controlados por una Inteligencia Artificial (IA). Todos conocemos casos de juegos en los que los personajes controlados por estos sistemas de IA se mueven libremente por el escenario, o son capaces de seguirnos a través de diferentes terrenos. Una manera de poder crear estos sistemas de navegación o de movimiento automático dentro del motor gráfico de Unity, es la creación de mallas navegables o NavMesh. Esta herramienta nos ofrece muchas posibilidades para conseguir estos automatismos de personajes.

Navmesh

La herramienta de navegación nos permite asignar a personajes (no controlados por el jugador) zonas de movimiento e incluso nos permite poder crear diferentes niveles o escalones en estos tipos de escenarios. Podemos además crear otros tipos de creaciones como podrían ser juegos de estilo “point and move”, en este tipo de juegos podemos mover a nuestro personaje principal haciendo click en una zona del escenario y nuestro personaje se moverá de forma autónoma hasta esa zona. Es decir toda la estructura que nos trae la herramienta de Navigation, nos van a facilitar la automatización de estos sistema de movimiento. La herramienta de navegación y con todas sus opciones y configuraciones se puede encontrar en el menú de Window y entrando en la opción Navigation.

Unity Bake

El Bake (u horneado) es un sistema de cálculo en el que se analiza toda la escena y se calculan las opciones deseadas, con esta información no tenemos que volver a realizar los cálculos en tiempo real, si no que podemos acceder a la información guardada y a partir de allí usar esta información para ahorrarnos cálculos en tiempo de ejecución.

Cuando hablamos de Navmesh Baking estamos calculando toda la información de la navegación del terreno, es decir calcularemos en que partes del terreno ( o la malla ) el personaje en cuestión se puede mover.

Navigation

La ventana de navegación nos ofrece diferentes pestañas donde calcular o configurar todos los elementos necesarios para el correcto funcionamiento de este sistema.

Los objetos navegables pueden contener objetos que no se van a desplazar, animar o mover en el juego, estos objetos que van a quedarse estáticos en tiempo de ejecución deben marcarse y activar la opción de “Navigation Static” dentro de la pestaña de Objects.

Además, podemos definir también en el apartado Layers, diferentes capas dentro de nuestro objeto navegable, estas zonas nos pueden servir para definir áreas donde al personaje le pueda costar más o menos desplazarse. Así podríamos andar sobre una zona asfaltada o sobre una zona con agua o más enfangada, lo que implicaría un mayor esfuerzo en el movimiento y el desplazamiento.

Una vez definidos los objetos estáticos y las diferentes capas o zonas que podamos encontrar en nuestra navegación podemos pasar a realizar los cálculos de Bake para finalmente tener configurada nuestra zona navegable. Hay que tener en cuenta varios en el momento de configurar esta pestaña, para que nuestro personaje pueda subir pendientes debemos tener en cuenta el valor del Max Slope, así com el valor de Step Height con el que indicaremos la altura máxima de los escalones u obstáculos que nuestro personaje podrá superar durante su navegación.

NaveMesh Agent

Por último podemos configurar los personajes para poder usarlos como navegantes. Para ello le vamos a tener que añadir el componente Navmesh Agent a los modelos u objetos que queramos que se puedan mover de forma autónoma en la zona de navegación. Podemos indicar a nuestro NavMesh Agent la posición de destino a la que queremos que se desplace haciendo uso de la función SetDestination en el script C# que controle la IA de nuestro personaje. Con esta función lo que vamos a hacer es darle un punto de destino en el mundo tridimensional a nuestro personaje para de forma automática pueda desplazarse hasta ese destino.

El Navmes Agent nos ofrece también diferentes opciones de configuración que deberemos ajustar de forma correcta para que el comportamiento de nuestro personaje al moverse de forma libre y autónoma por la escena lo haga de manera correcta y adecuada.

Dentro de las posibilidades que nos ofrece el NavMesh y la Navegación podemos encontrar también la opción de realizar zonas “saltables”, es decir, zonas en las que podemos pasar de una zona a otra a pesar de que estas dos no esten directamente unidas la una con la otra, como si el personaje diese un salto entre las dos. Además, podemos también definir diferentes obstáculos y que estos sean animables o movibles, con lo que podemos hacer que nuestro personaje se vea afectado por puertas que se abren o se cierran, dando mucho más juego y versatilidad a nuestro desarrollo.

¿Estás preparado para implementar la navegación dentro de tu proyecto? Déjanos tu comentario

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