Convirtamos nuestro sistema de waypoint existente en uno que use un navmesh en su lugar y haremos
esto para brindar una cobertura real y amplia del sistema navmesh antes de comenzar a profundizar en él
en otras conferencias.
Entonces, comenzando con el código con el que terminaste en la conferencia anterior, donde se le
ordenó al tanque mediante botones que siguieran estos puntos de referencia que hemos colocado, reemplazaremos el código A
* que pusimos allí a mano con el navmesh en su lugar.
Ahora, para convertir el entorno en un navmesh en Unity,
lo primero que debe hacer es encontrar todos los elementos que van a formar parte del
navmesh y esos son todos los modelos. En este caso, va a ser todo lo
que está bajo LevelArt en la Jerarquía y eso incluye cosas como el plano de tierra, casas de concreto, todo lo que está incluido.
Con este mapa en particular, ya se ha configurado para usar mallas de navegación,
pero la forma en que lo hace desde cero es que seleccione el elemento que desea incluir en el sistema de mallas
de navegación.
Entonces, en este caso, estamos seleccionando 'Concreto', que es ese pedazo de concreto alrededor del tanque. En el Inspector, al lado del nombre
del objeto debajo de donde está estático y en un pequeño cuadro desplegable, lo sueltas y
(déjame
hacer esto un poco más pequeño ...
ok)
y luego allí, estás buscando 'Navigation Static' y quieres que esté activado y todo lo que
está activado, todas las mallas se incluirán en el cálculo de navmesh.
Entonces, con eso activado, puede abrir la ventana de navegación. La ventana de navegación se puede encontrar
en 'Ventana> Navegación'.
Por lo general, lo tengo sentado debajo del Inspector porque realmente no vas a hacerlo mucho
después de haber establecido tu mundo.
Ahora las pestañas aquí, explicaré en conferencias posteriores, pero por
ahora vamos a hacer una demostración muy rápida de cómo funciona esto.
Vaya a la pestaña 'Hornear'.
Ahora, la pestaña Bake procesará la malla de navegación de su terreno en función de todos los objetos que
haya convertido en 'estática de navegación' y lo hará haciendo clic en el botón Bake.
Una vez que hayas hecho eso, verás que tu mapa cambia y obtienes todas estas áreas azules. Ahora estas son las áreas
que son 'transitables'.
Sé que son transitables ... si rápidamente pasamos a la pestaña Áreas en la navegación,
verá que ese color azul significa que esos polígonos que se generan están donde el agente puede caminar y solo está configurado en
este momento para 'Caminable' o 'No Walkable '. También hay un 'Salto' allí por defecto
también.
Ahora, estos 'transitables' y 'no transitables' están determinados por la forma en que está configurado su agente.
Por ahora solo vamos con el valor predeterminado.
Ahora, la otra parte de una malla de navegación es el propio agente y para definir qué es un agente y qué
sabe sobre el navegador, para que pueda encontrar la ruta
alrededor del navegador, debe agregar un componente de agente de navegación a sus NPC.
En este caso, es el tanque verde, por lo que si selecciona el tanque verde en el Inspector [Agregar
componente] y buscaremos 'Agente de malla de navegación'. Agrega eso. Eso hará que ese tanque se adhiera de
inmediato a esa malla de navegación, de modo que pueda usarla y encontrarla.
Hasta ahora, hemos estado codificando todos los comportamientos de dirección de nuestros NPC. Ahora que ha convertido el tanque en un
agente navmesh, ya estará programado con movimiento y velocidad y velocidad angular, aceleración y todas esas cosas, y encontrará
las configuraciones para aquellos en el componente que acaba de agregar al
tanque .
Una vez más, por ahora, los dejaremos como predeterminados, pero no dude en echar un vistazo a lo que son. Entonces tienes Velocidad, Velocidad
Angular, Aceleración.
También puede configurar Evitar obstáculos de qué tan lejos debe mantenerse alejado de las cosas también.
Ahora es este Nav Mesh Agent el que vamos a tomar con el script y luego decirle dónde está nuestro
punto de referencia.
Así que ahora vamos a reescribir nuestro script FollowPath, así que simplemente ábrelo.
Estamos haciendo todo esto a mano
en este momento, pero ahora que el sistema navmesh en Unity se hará cargo de nosotros, así que muchas
de las cosas que tenemos aquí, ya no las necesitamos.
En primer lugar, podemos deshacernos de nuestras
velocidades y nuestro objetivo. Entonces podemos deshacernos de nuestro sistema de nodos que tenemos y también del gráfico. Ya no necesitamos eso
tampoco.
Mantengo el administrador de puntos de referencia aquí porque se ha apoderado de nuestros puntos de referencia
que hemos colocado en el mapa, aunque ahora que Navmesh está en control, los puntos de referencia no se usarán como rutas entre puntos sino
como destino o una meta a la que quieres llegar. La búsqueda de ruta real ahora la realiza la
propia red de navegación y probablemente descubriremos que el tanque tomará diferentes rutas ahora
que lo está utilizando.
Entonces, en el Inicio, no necesitamos un CurrentNode y no necesitamos nuestra configuración gráfica.
Dejaremos
nuestros GoToHeli y GoToRuin allí.
Solo voy a comentar esto porque lo necesitaremos como referencia en un momento
y luego, en nuestro LateUpdate,
no necesitamos NINGUNO de este código, así que nos desharemos de todo y lo vaciaremos completamente.
El agente de navmesh ahora estará haciendo todo el trabajo para nuestro tanque, por lo
que tenemos que agarrarlo. En la
parte superior declararé un enlace a ese agente. Entonces creamos un
UnityEngine. AI. NavMeshAgent llamado 'agente'.
Y luego, en el Inicio, usaremos GetComponent para agarrar eso. Para establecer el objetivo para el agente, lo haremos
dentro de los 2 métodos que hemos escrito que se ejecutan mediante los botones.
Entonces es bastante simple en realidad.
Nos agarramos a ese agente, entonces '. SetDestination 'y es ese destino el que será la ubicación
del waypoint al que queremos ir. Nuevamente, estos no son waypoints como tales, son solo ubicaciones de
objetivos en el mapa.
En este caso, es wps [4].
Entonces es nuestra esfera roja la que está en nuestra posición de matriz 4 y queremos la 'transformación'. posición 'porque vamos a una posición y eso
es lo que necesita SetDestination.
Ahora para la Ruina, podemos copiar este código y colocarlo aquí y establecer
la posición en wps [0] para que el destino que coloque aquí solo tenga que ser una posición
y pueda ser otro agente que se esté moviendo un mapa o una ubicación establecida en cualquier lugar dentro
de ese agente.
Correcto.
Eso es todo lo que necesitas hacer.
El código de agente y el código navmesh hacen todo el resto del trabajo por usted, así que guárdelo
y volveremos a Unity. Presiona play.
Ahora sin un destino, obviamente el tanque no va a ir a ningún lado, pero intentemos
llegar al helipuerto, que está aquí.
Golpear [HeliPad].
Ves que el tanque ha dado la vuelta. El giro, la velocidad con la que se
mueve, todo está configurado en el tanque en el agente navmesh.
Entonces, ahora que el agente navmesh está allí, notará que también tomó un atajo y no siguió las rutas
de puntos de ruta reales que hemos establecido desde el sistema anterior porque ya no son necesarias.
Así que intentemos ir a la Ruina y veamos en qué dirección irá esta vez.
Entonces va a volver allí.
Parece que va a tomar un atajo en la esquina porque está calculando la distancia más corta para llegar
allí y esto es lo que está descubriendo que es el navmesh y puedes ver, bueno, incluso ha tomado un
atajo entre los edificios y hacia donde La ruina es Si observamos la escena
y hacemos clic en la pestaña Navegación, verá que el tanque PUEDE moverse hacia arriba entre los edificios.
Entonces, si el tanque era demasiado ancho, entonces es cuando puedes regresar y establecer el tamaño del agente para que no se
ajuste a través de estas brechas particulares y ver todos esos pequeños matices y cambios que puedes
hacer en el siguiente conferencias
Esto fue solo para mostrarle lo que puede hacer Navmeshes y lo fácil que es configurarlo, solo con la
configuración predeterminada.