Unity NavMesh

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Más información en:


  • Uno de los problemas a los que nos podemos enfrentar al desarrollar un juego es de dotar de inteligencia a los enemigos y que sean capaces de 'esquivar' los obstáculos de un escenario mientras intentan coger a nuestro protagonista.
Podríamos intentar hacerlo nosotros, ya que vimos en esta Wiki el uso del vector dirección y podríamos hacer que los enemigos calcularan dicho vector con respecto al jugador y que se movieran hacia él.
El problema que tendríamos es que si existen obstáculos entre el enemigo y el jugador, quedarían atrapados, como se observa en la siguiente escena:
Unity3d navmesh 1.jpg
Si tuviéramos que programarlo podría ser muy laborioso.
  • Para solucionarlo, Unity ofrece el sistema de navegación inteligente: Navigation System.
Este componente va a permitir definir mediante una serie de parámetros que área de nuestra escena es 'caminable' por los enemigos.
Por ejemplo, podremos definir que las zonas elevadas más de X grados no sean navegables (por tanto serían un muro) o que las bajadas o subidas de desnivel a partir de un tamaño no sean accesibles (formarían otro muro).
Una vez creado el Navigation, asociamos a cada enemigo un NavMesh Agent el cual hará que dicho enemigo vaya 'detrás' del protagonista esquivando los posibles objetos que encuentre por el camino.



Preparando la escena

  • Vamos a preparar una escena para mostrar el uso de este componente.
Los gráficos son utilizados de otras partes de este manual de la Wiki. Si no dispones de ellos no pasa nada. Puedes emplear los que tengas disponibles llegados a este punto de la Wiki y como último recurso puedes emplear figuras básicas como Cubos o Esferas.
  • Creamos una nueva escena o un nuevo Empty GameObject, sobre el que situaremos todos los gameobjects siguientes.
  • Un plano de dimensiones 5x1x5 y un material con una textura color Rojo asocicada (si ya habéis visto como crear un Terrain podríais hacer uso de uno).
  • Dos vayas que conformarán los obstáculos.
  • Un Jeep que será nuestro protagonista.
  • Un taque que será nuestro enemigo.
El tanque viene rotado por lo que el eje-Z del mismo no se corresponde con el eje-Z del mundo.
Para solucionarlo, creamos un Empty GameObject y dentro del mismo ponemos el tanque con el eje-Y rotado -90 grados.




Navigation


NavMesh Agent


-- Ángel D. Fernández González -- (2018).