El comportamiento de persecución es un poco como el de Sikh, excepto que en lugar de seguir a un objetivo, el agente
predice dónde estará el objetivo en el futuro para interceptarlo.
Vemos que esto ocurre todo el tiempo en los juegos deportivos en el caso del fútbol.
El balón real proporciona a los jugadores la posición futura prevista de su oponente.
Ahora, para determinar la ubicación hacia la que debe dirigirse nuestro perseguidor el ladrón, necesitamos obtener
la posición del objetivo, la dirección de desplazamiento y la velocidad.
También necesitamos la velocidad del perseguidor y su distancia al objetivo, ya que van a depender de la rapidez con la que
el ladrón pueda alcanzarlo.
A continuación, podemos predecir hacia dónde debe dirigirse el perseguidor basándonos en estos valores y
calcular a qué distancia del objetivo debe apuntar el perseguidor como la distancia entre el perseguidor y el objetivo dividida
por la suma de las velocidades de ambos agentes.
Así que sigamos adelante e implementemos esto en nuestro script de bot.
Así que abre el código de tu bot y vamos a poner a perseguir bajo FLI justo aquí abajo.
Así que perseguir tendrá su propio método, obviamente.
Así que evita perseguir.
Y luego dentro de aquí, lo que vamos a hacer es, en primer lugar, calcular el vector hacia el objetivo.
Así que vector tres, objetivo di.
Ah, entonces la dirección es la posición del punto de transformación del objetivo menos esta posición del punto de transformación.
Ahora, una vez que tenemos eso, podemos seguir adelante y calcular la mirada hacia adelante.
Entonces, ¿hasta dónde vamos a mirar más allá de la dirección de avance del objetivo?
Así que mira hacia adelante.
Y aquí es donde estamos prediciendo la futura ubicación.
Así que será el objetivo di r la magnitud del punto.
Y vamos a dividir eso por la velocidad del agente.
Así que la velocidad del agente más la velocidad de la unidad que va en la taza.
Para ello serán los objetivos punto obtener componente para la secuencia de comandos de la unidad.
Y recuerda que creamos esa velocidad actual o yo lo hice y lo puse ahí y te lo mostré antes donde estamos
actualizando la velocidad actual y lo convertimos en un valor público para que puedas acceder a él en el
script de la unidad.
Bien, eso es tener la mirada hacia adelante.
Y luego lo que vamos a hacer con eso es buscar realmente.
Así que buscaremos el objetivo.
Transformación del punto en posición de punto.
Más la mirada hacia adelante, pero la mirada hacia adelante la vamos a usar como un multiplicador contra el vector de avance de los
objetivos.
Por lo tanto, el vector de avance es la forma en que el objetivo está mirando y viajando de punto hacia adelante.
Y tiene una longitud de uno, por lo que se normaliza automáticamente para nosotros.
Así que multiplicando eso por la mirada hacia adelante nos da un vector que es la longitud de la mirada hacia adelante
y por lo tanto estamos añadiendo eso a la búsqueda.
Bien, ya lo tenemos.
Todo lo que tenemos que hacer con él es bajar en la actualización y sólo cambiar esto para perseguir.
Para que podamos ejecutarlo.
Bien, guardemos eso y volvamos a la unidad y pulsemos el play.
De acuerdo.
Así que puedes ver que se acerca al policía.
Movemos al policía.
Y si cambiamos de dirección, verás que entonces estará prediciendo la dirección futura más bien.
Entonces sólo a ciegas.
Siguiendo.
Creo que se puede ver lo lejos que está mirando hacia adelante.
En ese caso.
Ahora, cuanto más rápido vayan, más se mirará hacia adelante.
Ahora, si quieres forzar esa mirada hacia adelante un poco más de lo que es en realidad, que no se puede ver realmente
allí.
Volvamos a nuestro código y podemos multiplicar esto aún más.
Así que en realidad se trata de mirar más allá que de mirar hacia adelante.
Multipliquemos eso por cinco para darle una buena y fuerte mirada hacia adelante, supongo.
Volvamos y pulsemos el play.
Ahora lo que encontrarás es que mirará hacia adelante.
Ahora, mi bot ni siquiera va en este punto, pero una vez que empiece a añadir.
Una velocidad.
Para mirar hacia adelante.
Vamos allá.
Da la vuelta.
Y ahí lo tienes.
Así que ahora el cálculo para la mirada hacia adelante se ha vuelto bastante grande.
Así que es la velocidad que iba en esta dirección.
Y los bots terminaron allí, en algún lugar del borde del mapa.
Sin embargo, si esto está sucediendo, que no debería, porque realmente no se supone
que multiplique esa mirada hacia adelante, usted podría arreglarlo poniendo en otra condición para probar si su policía, su objetivo
ha dejado de moverse, en cuyo caso se iría a una búsqueda en su lugar.
Así que esa es una de las condiciones adicionales que se pueden añadir a esta persecución.
Y lo que vamos a hacer también es mejorar esto añadiendo algunas otras condiciones que tienen que ver con si se
debe buscar o si se debe mirar hacia adelante.
Primero.
Por supuesto, una condición que tendremos en cuenta es que si el objetivo ha dejado de moverse, entonces convertiremos
la persecución en una búsqueda y nos dirigiremos directamente hacia el objetivo.
La siguiente condición que vamos a considerar es que si el ladrón está delante del policía y prácticamente
ya va en la misma dirección, entonces el ladrón debería dar la vuelta y sólo buscar al policía.
Entonces, ¿cómo determinamos si el ladrón está delante del policía?
Bueno, usamos ángulos y usamos los ángulos entre los distintos vectores que ya hemos estado usando.
Cuando el ladrón está delante del policía, el ángulo entre el vector delantero del
ladrón y el vector, el policía será mayor de 90 grados cuando el ladrón está detrás del policía.
El ángulo será inferior a 90 grados.
Ahora bien, si el ladrón está delante del policía, puede que ya haya dado la vuelta para ir hacia el punto de interceptación.
Si este es el caso, no queremos que busque.
En cambio, tenemos que restringir aún más nuestras condiciones de búsqueda considerando el ángulo entre las dos
direcciones de avance de los agentes.
Y si esto es muy pequeño, entonces permitiremos que la persecución se convierta en una búsqueda.
Así que vamos a seguir adelante y añadir en estas condiciones en el método de persecución.
Así que el primero que tenemos es si el objetivo ha dejado de moverse, por lo que podemos probar que si la velocidad que es esto
aquí, permítanme copiar eso.
Si la velocidad es inferior a 0. 01 F y lo digo en lugar de decir igual a cero, porque a veces puedes tener un error flotante
con valores cero y puede que no sea realmente igual a cero.
Podría ser un número muy, muy pequeño.
Así que al hacer esto, te estás cubriendo de que si estamos más o menos quietos nuestro objetivo, entonces
lo que vamos a hacer aquí abajo es buscar.
Así que vamos a buscar el objetivo.
Así que la posición de transformación del punto de destino.
Y luego también vamos a regresar en lugar de continuar en este método.
Ahora, las otras cosas que queremos probar es el rumbo relativo del agente.
Así que si tenemos un pequeño ángulo entre las direcciones de avance de los agentes, entonces vamos a conseguir que nuestro
agente siga o busque el objetivo en lugar de mirar hacia adelante.
Así que tenemos que calcular ese ángulo en particular.
Así que vamos a flotar el rumbo relativo, lo llamaremos igual al vector tres punto ángulo.
Y ese ángulo va a estar entre este punto transformado hacia adelante y queremos obtener el vector hacia adelante
del policía o del objetivo.
Ahora tenemos que obtener el vector de avance en relación con el agente actual, lo que significa que tenemos
que traducir ese vector, que es la dirección de avance del objetivo en el espacio del agente.
Lo que significa esencialmente es que estás haciendo que el agente sea el punto de origen de su propio conjunto de
coordenadas cartesianas y luego proyectando el vector de avance del objetivo en eso.
Así que en realidad es bastante fácil de hacer.
Consigue la transformación.
Así que este punto tendencias forma de punto y tiene su propio método transformar vector.
Y el vector que se quiere transformar es el objetivo.
Punto transformar punto adelante así.
Así que los pones en el mismo espacio, en el mismo espacio relativo.
Así que ese es su ángulo entre las direcciones de avance.
Ahora también queremos obtener el ángulo entre la dirección de avance del agente y la dirección hacia el objetivo.
Así que eso será float to target equals vector three dot angle.
Y de nuevo, es este punto transformado hacia adelante.
Y de nuevo, tenemos que hacer un vector de transformación de puntos.
Y el vector en este caso es el ciervo objetivo, que calculamos justo antes.
De acuerdo.
Así que ahora tenemos estos dos ángulos, podemos ponerlos también en nuestro enunciado ith.
Así que vamos a ponerlos aquí y va a ser al objetivo y vamos a ver si es mayor de 90 y
nuestro rumbo relativo es menos de 20 grados y vamos a o que con la velocidad del objetivo.
Así que estas son nuestras condiciones en las que realmente realizaremos una búsqueda en su lugar.
Bien, guardemos eso y volvamos a Unity Press play y probemos.
Ahora, debido a las velocidades y ángulos actuales de estos tipos, es realmente difícil
ver si está buscando o si, de hecho, está mirando hacia adelante.
Pero lo es, confía en mí.
Y sí que marca la diferencia que tengas estos cálculos correctos cuando pasas a otros comportamientos
que realmente se basan en la persecución.