En esta conferencia, le mostraré cómo tomar su Máquina de estado finito creada en la última serie de conferencias
con el tanque y los puntos de referencia y transferirla a un NavMesh.
Lo primero que debe hacer es preparar su geometría en la escena para NavMesh.
Agarra algo de lo que quieras formar parte de tu NavMesh y luego en el Inspector, verás
que en la esquina superior está este pequeño 'Estático' y un cuadro desplegable.
Déjame mover esto por aquí.
Cuando lo sueltas, quieres marcar 'Navegación estática'.
Ahora ese es el plano de tierra.
Si está utilizando este modelo que he suministrado (o que Unity también suministró), todo estará marcado como
listo para NavMesh.
Déjame echar un vistazo a las rocas.
Así que solo haga clic en una roca aquí y eche un vistazo a lo que está marcado como y
verá que también se incluye como una estática de navegación.
Entonces, una vez que hayas hecho eso con todas las partes que serán parte de tu NavMesh,
NO tu personaje o NPC, no querrás que participen. Los puntos de referencia en sí mismos, tampoco son parte
de NavMesh.
Entonces, mis pequeñas esferas que solía representar donde están mis puntos de referencia, NO son estáticas de navegación.
Entonces, solo la geometría del mapa.
Ahora, una vez que haya hecho eso, debe abrir la ventana de navegación.
Ok, entonces configurar estos valores y luego hornear es prácticamente todo lo que haremos para configurar esto.
Lo siguiente es hacer del tanque un 'Agente NavMesh'.
Por lo tanto, seleccione su personaje (en este caso, el tanque) y en el Inspector, desea Agregar componente y
agregar el 'Agente de malla de navegación'.
Ahora para que el agente conozca los puntos de referencia, debemos establecer los puntos de referencia como destino para el Agente
de malla de navegación que está conectado a nuestro tanque.
Ahora, si recuerdas el tutorial anterior, hicimos muchos movimientos en el guión de Patrol, que está aquí y
puedes ver que ya actualicé la parte que necesitamos y que está aquí.
Entonces, en lugar de hacer el slerping y la traducción manualmente, solo tenemos que establecer el destino
para nuestro 'agente' y darle el waypoint actual.
Así que dejamos el cálculo de los puntos de referencia y las distancias aquí arriba, pero solo
usamos el método SetDestination y le damos una posición dentro de los límites de donde
están esos NavMesh y nuestros puntos de referencia rojos. Lo que llamamos 'agente' en este script es el Nav Mesh Agent que
está conectado al tanque.
Para que el script Patrol pueda acceder a él, en el script NPCBaseFSM, agregué
un 'UnityEngine público. AI. Agente NavMeshAgent '. Esto es lo que estamos usando
en el script de Patrulla y luego lo configuramos en OnStateEnter aquí, que solo se agarra al Nav Mesh Agent que conectamos
al tanque verde y eso es lo que está haciendo todo el trabajo por nosotros.
Entonces, si guarda ese código y luego cambia de nuevo a Unity
y presiona Reproducir, verá todo en acción ...
Entonces, todo lo que he hecho es agregar 2 o 3 líneas de código y configurar la geometría en la escena para que
sea un NavMesh
y hemos cambiado completamente el comportamiento de este sistema de puntos de referencia.
Ahora este agente está un poco relajado,
hasta el momento en que llegue aquí lo verá. Cuando llega a un punto intermedio, se relaja un
poco, si pasa un punto intermedio retrocede un poco, es bastante suave y fluido y se ve un poco
demasiado suave para un tanque.
Entonces, lo que puede hacer es pasar a la configuración del tanque y ver cosas
como cambiar la velocidad, también puede cambiar la distancia de frenado, la aceleración, el frenado automático, puede activar o
desactivar
eso, distancia de frenado
que podríamos poner a 2, aumentemos la velocidad angular a 200 y luego juguemos y veamos cómo se ve y cómo
afecta el giro.
Así que esta vez no se quedó atrapado allí.
Ahora tiene una forma mucho más agradable de girar cuando llega al punto de referencia, ¿ves cómo no gira y se
mueve al mismo tiempo?
Entonces, de nuevo, realmente depende de usted el comportamiento de su NPC particular.
Por último, si quieres que tu tanque ataque a tu personaje jugador, entonces es cuestión
de entrar en el código donde tenemos todo listo y aquí, en OnStateUpdate donde solíamos tener el 'giro hacia
el oponente' y luego slerping y luego traduciendo,
todo lo que hacemos es cambiar eso a 'agent'. SetDestination 'y establece el destino para el oponente, donde el
oponente es nuestro personaje jugador.
Recuerde, no desea que el personaje jugador tenga nada que ver con NavMesh, por lo que los puntos de referencia
no son parte de NavMesh y el personaje jugador no es parte de NavMesh.
Son ubicaciones en NavMesh. ¿Tiene sentido?
Tienen que estar
dentro de NavMesh; de lo contrario, tu personaje y los NPC nunca podrán encontrarlos ni alcanzarlos.
Ok, entonces con eso ahí, juguemos y veamos el comportamiento de nuestro tanque.
Entonces, si nos acercamos lo suficiente a nuestro tanque para que podamos activarlo, entonces él decidió que vendrá
y nos atacará.
¡Tiene movimientos mucho mejores que antes, en la
medida en que puede deslizarse a la vuelta de la esquina! Ahora mi tanque tiene la ventaja de que puedo pasar por la geometría,
no tiene la física, pero él no puede.
Tiene que apegarse a NavMesh, así que verás que intentará encontrar su propio camino de regreso para atacarme.
Ahora todo esto está sucediendo en NavMesh. No hemos programado nada de esto por
nosotros mismos, así que así de poderoso es el sistema NavMesh y él seguirá tratando de perseguirme, hasta
que logre
superarlo, en ese
momento (parece que ya lo tengo) volver a la patrulla.
OK, eso es lo más básico de configurar un NavMesh con un sistema de waypoint existente.