De acuerdo.
Hasta ahora hemos pasado mucho tiempo codificando y no nos hemos enfrentado a muchos retos, excepto seguir el código y ponerlo
en práctica, por supuesto, pero nada en lo que hayas podido ampliar tus conocimientos.
Así que todo este vídeo está dedicado a un reto que me gustaría mostraros y que he montado.
Muy bien.
Así que tengo mi personaje.
Permítanme alejar a mi personaje jugador para que no empiece a disparar inmediatamente porque eso se vuelve
molesto.
Vale, pues vamos a pulsar el play y te mostraré lo que hace esto.
Así que he creado un cubo en el entorno que está ahí.
Ahora, este cubo es un lugar seguro y lo tengo etiquetado con seguro como f e en mayúsculas.
Ahora lo que ocurre es que el ARG va a seguir haciendo exactamente lo mismo que antes, sólo que ahora podemos
acercarnos sigilosamente por detrás y darle un susto.
Así que si nos ponemos dentro de un ángulo, ángulo de visión o un ángulo de visión negativo de 30 y una distancia de dos, básicamente
va a abuchear.
Y se va.
Correrá hacia ese cubo donde ahora está a salvo y luego volverá y continuará con su patrulla mientras no estés lo suficientemente
cerca.
Así que vamos a ver si podemos asustarlo de nuevo.
Subiremos por aquí.
Y entrar en su bucle.
Lo asustó.
Vuelve al cubo.
Ahora supongo que si nos quedamos aquí y se da la vuelta, vendrá a dispararnos así.
De acuerdo.
Así que ese comportamiento también sigue ahí.
Muy bien.
Así que eso es básicamente lo que quiero que hagas.
Quiero que añadas un estado de huida a nuestro código y que huyas a un lugar seguro, que es este cubo.
Así que ahí está el cubo.
Y como dije antes, la etiqueta para ello es segura.
Sí.
Así que gran reto.
Ponga el vídeo en pausa ahora.
Ve a eso.
Y cuando volvamos, lo recorreré con ustedes.
Lo primero que tienes que hacer para que esto funcione es crear tu cubo o tu lugar seguro.
No importa lo que sea.
Sólo tiene que ser un objeto del juego que tiene una posición en él y esa posición que va a utilizar
como un destino establecido para su agente.
Ahora, es muy importante que etiquetes esto con algo para que puedas identificarlo.
Así que en el inspector, lo que hice con este cubo en particular es que fui a las etiquetas y creé
una llamada Seguro con S mayúscula y la marqué para asegurarme de que esa es mi ubicación segura.
Y puedes ponerlo donde quieras en el mapa.
Ahora el resto de la funcionalidad ocurre dentro del archivo de estado.
Así que abre este archivo de código estatal.
Y lo que he hecho es, en primer lugar, en la parte superior con los estados, nuestro enum, he añadido en uno llamado huir
porque eso es lo que vamos a hacer esencialmente huir.
Ahora volviendo aquí abajo donde estamos haciendo una lata C de jugador y atacando en medio
de esos he añadido en un nuevo método que va a determinar si el jugador está detrás de la NPC a una distancia de
menos de dos y un ángulo de 30.
O al menos sería un ángulo de 60 porque sólo se calcula sobre una mitad.
Así que tenemos la dirección.
Ahora la dirección esta vez va a ser al revés.
Y si echas un vistazo aquí abajo al jugador que puede atacar, la dirección es desde el NPC hacia el jugador.
Esta vez estoy calculando un vector diferente que va desde el jugador hasta el NPC para que cuando obtengamos el ángulo,
estemos calculando ese ángulo basado en la parte trasera del personaje, no en la parte delantera.
Así que el ángulo en sí, el cálculo para eso es el mismo que usamos antes justo aquí arriba.
Y la única diferencia es que tenemos este vector de dirección orientado en la otra dirección.
Entonces comprobamos que la magnitud es menor que dos y el ángulo es menor que 30 y entonces vamos a
volver.
True, significa que estamos detrás del personaje, de lo contrario devolveremos false.
Así que vamos a utilizar este es jugador detrás.
Ahora vamos a activar eso dentro de la patrulla.
Así que si bajamos a donde está la patrulla y echamos un vistazo en la actualización, podremos ver dónde
se ha añadido aquí.
Así que por debajo del jugador cansee que vamos a probar es el jugador detrás del NPC.
Si lo es, entonces cambiará el siguiente estado para convertirse en huida, que todavía tenemos que escribir y luego
salir.
Entonces, ¿qué aspecto tiene la huida?
Porque es el que está haciendo toda esa funcionalidad ahora.
Está en la parte inferior de mi código y es realmente muy simple y corto.
Así que la ubicación segura, he creado un objeto de juego en la parte superior.
Ahora lo que podrías haber hecho, que probablemente sería ligeramente mejor que lo que yo he hecho,
es poner la ubicación segura en tu entorno de juego.
Singleton y lo instaló allí.
Así que siempre está disponible.
Eso sí que va a suponer un menor gasto de procesamiento que conseguir esa ubicación segura con el objeto de encontrar el juego
con la etiqueta cada vez que tengas que huir.
Así que hazlo si quieres.
Pero lo he hecho de esta manera ahora dentro de la configuración para la huida real en su construcción, lo nombramos, y luego
establecemos el objeto de juego de ubicación segura para encontrar el objeto de juego que tiene seguro en él.
Ahora podría haber sido un árbol.
Incluso en ese entorno, no importa lo que sea.
Sólo necesitamos una posición de vector tres para que nuestro agente corra.
Ahora tenemos nuestra entrada nuestra actualización y nuestra salida y son bastante cortas realmente.
Vamos a echar un vistazo muy parecido a los que hemos tenido antes.
Así que el animo se pone en marcha.
He decidido que va a huir.
Debe utilizar la animación de ejecución donde luego va a establecer el agente se detiene en falso para que podamos crear
un camino para él.
La velocidad la he puesto en seis, así que es un poco más rápido de lo que corría hacia ti antes.
Y luego en el mismo entrar estamos haciendo un destino establecido para nuestra ubicación segura, punto transformar la posición del punto.
Ahora la razón por la que he puesto esto en enter en lugar de dentro de la actualización, si usted recuerda que hablé de establecer un destino
y luego el juego tipo de necesidad de ir a través de un bucle de actualización completa antes de que la
ruta se ha calculado.
Ponerlo en enter va a hacer eso por ti porque no será hasta el siguiente bucle del juego o
la siguiente actualización que volvamos a hacer la actualización que está en el estado, lo que significa que para entonces
tenemos nuestra ruta calculada y podemos entonces probar la distancia restante.
Ahora la distancia restante en este caso es menor que uno.
Así que cuando el NPC llega a la parte superior de ese cubo, vamos a volver al estado de inactividad y recuerde que el estado
de inactividad entonces tiene su 10% de probabilidad de entrar en la patrulla, que lo hace muy rápidamente,
y eso es más o menos.
Así que ahora puedes ver el poder de crear estas máquinas de estado finito y la clase de estado.
Y mientras tengas tu código de entrada y tu código de salida, encargándose de las transiciones entre estados,
hace que sea muy fácil seguir añadiendo más y más comportamientos para un NPC.
Así que es un concepto muy poderoso.