Ser capaz de calcular la línea de visión entre un ojo y su objetivo o quien lo persigue es una buena
habilidad para tenerla programada como comportamiento.
Hace que parezca un poco más real si cree que está siendo observado.
Y ya hemos tratado esto antes, cuando estábamos haciendo nuestras máquinas de estado finito y persiguiendo
a UG en ese mapa.
Ahora, lo dejé como un desafío para ti en la última conferencia para poner esto en el código
que ya tienes para el ladrón.
Así que, en primer lugar, echemos un vistazo y recordemos los ángulos que intervienen.
Hay, por supuesto, un vector hacia el policía desde el ladrón, y luego está el vector del ladrón hacia adelante.
Y es este ángulo aquí el que queremos comprobar, si es lo suficientemente pequeño como para considerar que
puede verlo.
Si es un ángulo muy grande, entonces el ladrón va a estar mirando en la otra dirección.
Así que si está mirando hacia aquí, el ángulo desde allí hasta aquí va a ser mucho mayor
que si está mirando hacia aquí.
Y el ángulo entre aquí y allá es obviamente muy pequeño.
Así que podemos usar eso como una comparación para decir, bueno, él puede ver al policía si está en un cierto rango.
¿Y lo hiciste funcionar cuando lo pusiste?
Vamos a repasar el código y a ponerlo en marcha ahora.
De acuerdo.
Así que abre tu script de bot y vamos a poner esto en el objetivo de la lata.
Así que es bastante sencillo porque ya tenemos una buena parte de las matemáticas hechas.
Lo único que tenemos que hacer es calcular realmente el ángulo.
Así que queremos calcular el ángulo entre el vector de avance del agente y la dirección hacia el objetivo.
Ahora ya tenemos el vector al objetivo o la dirección a la etiqueta, que es nuestro rayo al objetivo que estamos utilizando
para nuestro rastrillo nosotros.
Así que podemos usar eso en nuestro cálculo de ángulos.
Así que el ángulo de la mirada del flotador.
Iguala el ángulo de la víctima tres y eso calculará el ángulo entre este punto transformador hacia adelante y
el rayo hacia el objetivo.
De acuerdo.
Entonces, una vez que tenemos eso, podemos probarlo con algún ángulo en particular.
Así que si ponemos eso en nuestra declaración if, pondremos mirar el ángulo y queremos que sea
menor de, digamos, 60 grados y hacemos un raker.
Así que si el ángulo es menor de 60 grados, estamos mirando en la dirección correcta y podemos hacer un lanzamiento
de rayos hacia el policía, porque recuerde, podríamos estar mirando en la dirección correcta del policía, pero podría
estar en el otro lado del edificio.
Así que eso significa que este rayo también va a fallar.
Así que, vale, ya lo tenemos, guárdalo.
Ahora vamos a ir a ver esto.
Así que con él actualmente mirando en la dirección correcta, si presionamos el play, es de esperar que vaya a esconderse.
Sí.
Así que él dice, mira, la policía en mí, voy a ir a esconderse.
¿De acuerdo?
Así que ahora vamos a darle la vuelta de esta manera.
Así que no mira al policía y podemos pulsar el play y ahora no se inmuta en absoluto.
Podemos llegar aquí y él no puede ver al policía, pero si el policía pasa por delante de él y se pone
en su rango visual, entonces va a huir.
Así que ahora se esconde detrás del árbol, pero mirando en la otra dirección.
Pero si nos ponemos delante, se dará la vuelta y volverá aquí.
Bien, genial.
Incluso podemos añadir algo más a esta dinámica, ya que podríamos programar si el policía puede ver al ladrón.
Así que el ladrón, podría estar mirando al policía o el policía podría estar mirando en la otra dirección.
Así que es como, Oh, él no puede verme o no me está mirando, así que no tengo que hacer nada bien.
Así que este es tu próximo reto.
Lo que me gustaría que hicieras en la clase es venir aquí y vamos a crear una lata de toro para verme.
Así que esto es ¿puede mi enemigo verme regresar?
Verdadero, si pueden y falso si no pueden.
De nuevo, utiliza el ángulo de visión de 60.
Así que las matemáticas van a ser bastante similares a lo que ocurre aquí.
Así que sí, inténtalo.
Y cuando volvamos, lo repasaré contigo.
Bienvenido de nuevo.
¿Cómo te fue con eso?
Bueno, como he dicho, los cálculos son más o menos los mismos que hemos tenido antes.
Así que tomemos este código.
Así que esto es conseguir la dirección ahora.
Esto es obtener la dirección del ladrón, que es esta posición transformada al policía.
Ahora, en este caso, querríamos averiguar cuál es el otro ángulo.
Así que vamos a cambiar esto y obtener el vector que va en la otra dirección
así.
De acuerdo.
Así que podemos calcular el ángulo como lo hicimos antes usando eso.
Podemos usar esto aquí.
Ahora, el orden para encontrar el ángulo no va a importar en este caso.
Te va a dar el mismo tipo de cálculo, excepto que esto todavía está calculando el ángulo entre el
ladrón y la tasa del objetivo, lo cual es incorrecto porque en realidad queremos trabajar eso basado
en la dirección de avance del policía.
Así que esto sería la transformación del objetivo hacia adelante.
De acuerdo.
Ahora, una vez que tenemos eso, podemos hacer una prueba.
Por lo tanto, si el ángulo de mirada es menor que 60, entonces devolveremos true.
En caso contrario, devolverá false.
Bien, ya lo hemos hecho.
Ahora tenemos que incorporarlo a nuestra actualización aquí abajo.
Así que vamos a hacerlo un poco más complejo aquí abajo.
En cuanto a la ocultación, vamos a decir algo así como que si se puede ver.
Objetivo y puede verme, entonces haremos un escondite inteligente.
De lo contrario, vamos a perseguir a los policías para que la policía no busque.
Haremos una persecución así.
Bien, hecho esto, guárdalo y volvamos a probarlo.
Así que de vuelta en Unity, pulsaremos el play e inicialmente el ladrón se dará la vuelta, perseguirá al policía y dirá,
oh no, oh no, no puede hacerlo.
Así que va entre esconderse y acompañar al policía para no perseguirlo y esconderse todo el tiempo.
Si el policía se mueve hacia aquí va a perseguirlo porque no lo está mirando, pero si se da la vuelta puede
conseguir que se vaya.
Pero sólo se aleja un segundo porque en cuanto se ha dado la vuelta, se ha olvidado de que
ha visto al policía y eso no va a funcionar.
Así que vamos a añadir un poco más.
Vamos a poner un poco de período de enfriamiento, y sólo voy a poner eso aquí.
Voy a poner un toro para el enfriamiento es igual a falso.
Y probablemente deberías poner esto en la parte superior de tu programa.
Pero como estamos aquí abajo y se puede ver, está ahí.
Entonces queremos un comportamiento nulo, enfriar.
Y lo que va a hacer es poner el enfriamiento igual a falso.
Ahora el enfriamiento se pondrá en verdadero cuando hayamos empezado a ejecutar un escondite inteligente así que aquí abajo irá el enfriamiento.
Es igual a verdadero, lo que va a poner en marcha en un minuto.
Te mostraré dónde está.
Y una vez que hagamos eso, podemos ir a evocar el comportamiento, enfriar.
Así que eso se disparará en, digamos, 5 segundos.
Así que dame 5 segundos para ir a ocultar y luego esto volverá a ser falso, lo que permitirá que este código se ejecute tan
pronto como ponemos estas próximas líneas de lógica.
Así que aquí pondremos si no nos estamos enfriando porque si nos estamos enfriando, estamos en medio
de tratar de ir a hacer un escondite inteligente y escondernos detrás de algo de otra manera.
Así.
De acuerdo.
Sí.
Así que guarda eso.
Volvamos a Unity y comprobémoslo.
Así que esta vez cuando se da la vuelta y va, mira, hay un policía.
Irá a esconderse inmediatamente.
Mira.
Sí.
5 segundos.
Voy a ir a esconderme detrás de este árbol.
Puede que me olvide de que el policía está ahí y vuelva a echar un vistazo.
Si está ahí, sigue ahí.
Voy a ir a esconderme de nuevo.
El policía no mira esta vez.
Y cuando el ladrón vuelve, va, Oh, no está mirando.
Voy a escabullirme detrás de él.
Sí, genial.
Así que está funcionando bastante bien.
Así que hay muchas cosas diferentes que puedes hacer ahora que tienes estos comportamientos básicos de búsqueda implementados con
estos pequeños bots muy simples en la malla de navegación.
Diviértete mucho con ellos.
Espero que haya disfrutado de esta sección.
Obviamente, hay diferentes dinámicas en la mecánica del juego que puedes implementar con esto.
Y sí, hemos terminado con esta sección.