De acuerdo.
Es hora de empezar a incorporar un poco de comportamiento de la IA en nuestro NPC y vamos a hacerlo en los
Estados para no tener que tocar el script de la IA en absoluto.
Vamos a entrar en los Estados y sólo la transición de los diferentes estados para cambiar el comportamiento
de la NPC, que es lo que son.
Vamos a ir a la parte superior de nuestro código de estados en el estado base.
Lo que voy a hacer aquí es añadir unos cuantos métodos de ayuda.
En primer lugar, la lógica que vamos a utilizar es ¿el PNJ puede ver al jugador?
Así que vamos a utilizar una especie de cálculo simple de la línea de visión, lo que significa
que el jugador tiene que estar dentro de una cierta distancia, pero también tiene que estar en frente del NPC, momento en
el que el NPC puede decidir si va a perseguir al jugador o si va a empezar a disparar al jugador.
Así que lo haremos de manera que tenga que estar un poco más cerca del jugador para poder disparar, lo que significa
que puedes huir y hacer que la embajada corra detrás de ti hasta que llegue al campo de tiro, momento en
el que volverá a disparar.
Así que es un poco más dinámico que tenerlo simplemente disparando quieres conseguir que se mueva por el
mapa y te siga.
En primer lugar, vamos a construir estos dos métodos.
Así que primero queremos un bool público.
Así que va a devolver true o false y será puede ver jugador.
Así que estamos haciendo una pregunta muy simple ¿puede el NPC ver al jugador?
Ahora, para hacerlo, tenemos que calcular la distancia y también el ángulo.
Así que vamos a empezar con el vector tres.
Será una dirección desde la posición del punto del jugador.
Menos la posición de transformación del PNJ.
Así que esto nos da el vector del NPC al jugador.
De acuerdo.
Entonces podemos encontrar el ángulo.
El ángulo de flotación es igual al ángulo de punto del vector tres construido en la unidad matemática usando el vector de dirección
y el NPC es el vector de punto adelante de la forma de trance.
Entonces, con ese ángulo, podemos averiguar si estamos dentro de la línea de visión.
De acuerdo.
Así que la declaración if va a ser un poco como esto.
Si la dirección, que es el vector entre el jugador y el NPC punto magnitud, que es la longitud de ese
vector.
Así que la distancia entre el jugador y el MBC es menor que la dist.
Recuerden, esa es nuestra carroza que creamos muy temprano en la cima.
De hecho, vamos a utilizar todos ellos en este pequeño conjunto de métodos.
Así que tenemos nuestra distancia visible a diez, nuestro ángulo visible a 30 grados y nuestra distancia de disparo
a siete.
Y puedes cambiarlos y jugar con ellos como quieras para conseguir diferentes comportamientos.
Bien, ahí está nuestra distancia visible y también queremos que el ángulo sea menor que el ángulo viz.
Así que el ángulo visible se establece en 30 y vamos a encontrar el ángulo entre la dirección
y el vector de avance del NPC, que será la mitad de su visibilidad total.
Así que si quieres un campo de visión de 60 grados para tu NPC, entonces le damos un ángulo de visión de
la mitad de eso, que es el 30.
Ahora bien, si ese si es correcto, entonces podemos decir que vamos a volver.
¿Es cierto?
Sí, puedo ver al jugador.
De acuerdo.
Arregla estos soportes y terminamos con eso.
Oh, por supuesto.
También necesitamos devolver false como nuestro fallback de que no podemos ver al jugador.
El otro método que se añadirá justo después de este será para determinar si estamos lo suficientemente
cerca para atacar al jugador por lo que lo convertimos en una bola pública de nuevo, puede atacar al jugador.
Y luego dentro de aquí, lo que vamos a hacer es obtener nuestro vector de dirección de nuevo para que podamos
copiar este aquí.
Y simplemente vamos a comprobar la longitud de la misma.
Por lo tanto, si la magnitud de la dirección es menor que el paracaídas, la distancia o la dist en este caso, entonces vamos a volver.
Es cierto.
Si no, volveremos.
Falso.
De acuerdo.
Así que creo que perdí un soporte allí para el final de la clase y lo pusimos de nuevo.
De acuerdo.
Así que estos son los dos métodos que vamos a utilizar más adelante en otros estados para determinar
si debemos empezar a seguir al jugador.
Ahora, todavía no tenemos esos estados, así que vamos a añadirlos en la parte inferior.
Así que desplázate hasta el final o abre un nuevo archivo si vas a poner todo esto en archivos
de clase separados.
Y empecemos por perseguir.
Así que la clase pública persigue.
Y eso será un estado.
Entonces lo primero que tenemos que hacer es nuestro constructor.
Así que público.
Perseguir.
Y va a tener más o menos lo mismo que nuestros otros estados, que es esto de aquí, porque tenemos
que pasar por todos estos detalles.
Así que vamos a añadir esto.
Así.
De acuerdo.
Luego, dentro de aquí, vamos a establecer el nombre.
Así que el nombre será igual a estado punto perseguir.
No ese estado.
Son así.
Entonces necesitamos la velocidad del agente.
Así que la velocidad de los agentes.
En este caso, cuando te persigue, que sean cinco.
Así que y en realidad estar corriendo en lugar de caminar cuando él está persiguiendo a usted.
Por lo tanto, usted necesita para hacer un poco más grande y luego sólo hacer agente punto se detiene igual a falso.
Muy bien, ahora vamos a entrar.
Así que la anulación pública.
Vacío.
Entra.
Y lo va a hacer.
Establece la animación para que se ejecute, así que anima set trigger.
Se está ejecutando y eso es todo lo que tenemos que hacer dentro del enter el método que va a hacer la mayor parte del trabajo será
update en este caso.
Así que public override void update.
Y no tendrá la actualización como hemos aprendido antes.
Vamos a deshacernos de eso porque lo que no hace no nos sirve para establecer el destino del agente y esto establecerá una
posición de meta para el agente para las cosas de la malla de navegación.
Así que es la posición del punto del jugador la que lo fijará.
Entonces vamos a decir que si el punto agente tiene un camino, lo que significa que realmente está siguiendo al jugador,
vamos a probar si podemos atacar.
Así que estamos en persecución y luego, si estamos lo suficientemente cerca, queremos pasar al ataque.
Así que si puede atacar al jugador.
Y luego dentro de eso pondremos siguiente estado igual a nuevo ataque.
Y que de nuevo tendremos nuestro agente NPC Adam y el jugador pasó a través y luego la etapa será igual
al evento.
Punto.
Salir porque ya hemos terminado con este estado de persecución y queremos pasar a la salida.
Ahora, si no podemos atacar al jugador, entonces vamos.
Así que vamos a probar si más, si no podemos ver el jugador, por lo que no ver el jugador.
Recuerda que al ver al jugador se pasa a este estado y luego, una vez que ya no podemos ver al jugador,
queremos volver al estado de patrulla.
Así que el siguiente estado, en este caso, si no puedes ver al jugador, será igual a la nueva patrulla.
De nuevo, queremos pasar por estas cosas.
Copiémoslos de allá arriba y traigámoslos aquí.
Y de nuevo, vamos a escenificar un evento igual, no a salir así.
Así que esta es nuestra actualización.
Vamos a cerrar los paréntesis para el camino del has.
Ahora, ¿por qué estoy comprobando esta ruta si obviamente hemos establecido un destino aquí?
Pues bien, con el sistema de malla naval, lo que ocurre es que puedes establecer un destino, pero el procesamiento de
la malla naval en sí puede no haber tenido lugar todavía en el momento en que llegues de aquí a la siguiente clase de líneas.
Por lo tanto, usted quiere al menos esperar una actualización hasta que vuelva a entrar aquí para averiguar si usted tiene
un camino y luego averiguar el ataque y esas cosas.
De lo contrario, se obtiene un comportamiento realmente extraño y es sólo una cosa que hace la malla de navegación y la
forma en que la malla de navegación lo hace, habrás configurado algo para la malla de navegación y le has dicho que establezca un destino
o elabore una ruta o haga algo con el agente.
Y entonces intentarás hacer cosas inmediatamente después en tu código y no funcionará.
Y eso es porque tiene que ejecutar cosas en segundo plano antes de estar en una especie de estado de preparación.
Y esto aquí es sólo una prueba para eso.
Muy bien.
Así que ya hemos hecho nuestra actualización.
Pongamos nuestra salida y eso será public override, void, exit.
Y cuando salimos vamos a restablecer el gatillo para nuestra está ejecutando sólo para asegurarse de que no está colgando
en nosotros.
Luego nuestra salida de la base.
Así que todo está hecho para la persecución.
Justo después de eso, nuestro estado final por ahora es un ataque de clase pública.
Estado.
Y este es el ataque que estamos usando aquí.
Si puedes ver al jugador, queremos pasar al modo de ataque.
De acuerdo.
¿Qué vamos a tener aquí?
Bueno, el NPC en este caso realmente tiene que seguir al jugador o girarse y mirar al jugador.
Si quieres que lo haga mientras se dispara.
Así que vamos a poner un valor de velocidad de rotación flotante aquí es igual a F para que podamos girar alrededor.
Vamos a agarrar la fuente de audio que está conectada al NPC.
Ahora, este es el caso que mencioné en la conferencia anterior donde voy a tener un componente de obtención
para obtener la fuente de audio, mientras que probablemente sería mejor pasarla en lugar de
obtenerla cada vez que se presente una situación de ataque.
Pero esta es la forma en que lo he hecho.
Así que ataque público.
Ahora necesitamos todas las piezas que teníamos antes.
Para estos, vamos a ir a la persecución y acaba de agarrar todo eso porque estamos
usando eso de nuevo, ponerlo en nuestro ataque y luego vamos a nombrarlo.
Así que el nombre es igual al punto de ataque del estado.
Y disparar va a ser igual al componente secreto PNP.
Para la fuente de audio que se adjunta a UG, que es un sonido de disparo.
Bien, eso es todo lo que estamos haciendo dentro de ese ataque.
Muy bien.
A continuación, necesitamos de nuevo las antiguas normas de uso.
Así que public override, void, enter y.
Anulación pública.
Vacío.
Actualización.
Y la salida.
Así que public override, void, exit.
Cuando entramos en este estado, en primer lugar, queremos establecer una animación de disparo.
Así que anima el gatillo del juego.
Está disparando.
Nuevamente el Agente Dot es detenido se va a sentar en este caso a la verdad como lo hacemos en este caso queremos detener al agente
porque están atacando han salido de la persecución.
Así que en realidad son el agente está caminando a lo largo de un camino hacia el jugador.
Pero en cuanto ve al jugador, tiene que detener ese camino.
Así que al poner el agente se detiene igual a verdadero en realidad tipo de detenerlo en sus pistas y luego
se puede empezar a disparar y que evitará que te siga mientras que todavía está disparando.
Ahora también necesitamos iniciar el sonido de disparo así que vamos a disparar el juego y eso lo iniciará para nosotros.
A continuación, pasamos al método de actualización y tendremos que hacerlo en el siguiente vídeo porque estoy
bien, se me acaba el tiempo, así que nos vemos ahí.