En la clase anterior, añadimos un vector a nuestros cerdos y conseguimos que saltaran durante toda la longitud
de ese vector.
Ahora haremos que se muevan hacia el lugar de la meta.
Por lo tanto, primero tenemos que calcular cuál es el vector hacia la ubicación de la meta.
Y la forma de hacerlo es obtener las coordenadas de la meta y restarle las coordenadas del
cerdo, lo que te dará el vector del cerdo a la meta.
Así que vamos a abrir nuestro movimiento, que está en los dos cerdos.
Aquí tenemos el objetivo.
Ahora vamos a calcular también un vector tres, que será la dirección en la que vamos a viajar.
Nos desharemos de esta traducción a partir de aquí, y en su lugar diremos realmente esa dirección.
Es igual a la posición del punto de transformación de la meta menos la posición del punto de transformación de los cerdos.
Y ese es el objeto en el que está este código.
Así que transforma la posición del punto y eso nos dará nuestra dirección.
De acuerdo.
Entonces lo que hacemos es saltar por dirección.
Así que si lo ponemos aquí abajo y ponemos que esta posición de punto de transformación es igual a esta posición de punto de transformación, y por supuesto no necesitas poner
esto aquí porque también podrías ponerlo aquí arriba.
Es algo que me queda de todos mis años de programar esto.
Así que este punto transforma la posición del punto más la dirección.
Ahora esta línea aquí es lo mismo que ir este punto transformar traducir.
Dirección.
Así que estas dos cosas son equivalentes, pero vamos a utilizar esta posición aquí arriba.
De acuerdo.
Así que guardemos eso y echemos un vistazo a lo que obtenemos para que los cerdos salten a la ubicación
de la meta.
Así que vamos a pulsar el play.
Y ahí están.
Así que en realidad ambos están encima del otro en este momento.
Permítanme moverlos para que puedan ver que ambos están en ese lugar.
Ahora bien, normalmente cuando tienes un personaje de inteligencia artificial y quieres que se mueva hacia un
lugar de destino, no salta inmediatamente hacia allí.
Se abren paso poco a poco por aquí.
Así que lo que voy a hacer con estos dos cerdos, sólo voy a moverlos hacia fuera.
Así que están en un lugar diferente de cada uno de ellos.
Ahora vamos a volver a nuestro código MOVE y vamos a bajar en la actualización y hacer esta una actualización
tardía porque queremos que sea la última cosa que se calcula.
Normalmente se pone este tipo de movimiento en una actualización tardía porque ocurrirá después de cualquier física,
cosas que estén pasando o animaciones, y que en este caso no tenemos, pero es una buena práctica ponerlo en
una actualización tardía.
Así que esta línea aquí que está moviendo nuestro cerdo, sólo voy a cortar eso de ahí y lo pondremos en nuestra actualización
tardía para que se ejecute una y otra vez.
Ahora, el problema es que la primera vez que esto se ejecuta va a saltar el cerdo directamente a la ubicación de la meta.
Pero queremos que sólo dé pequeños pasos de esta dirección, no todo el vector de dirección.
Y puedes hacerlo eligiendo una pequeña sección de la misma para poder reducirla multiplicando
por algo así.
0. 01 f el vector de dirección seguirá apuntando en la misma dirección.
Simplemente se acorta.
Así que en lugar de un gran salto, habrá que dar muchos pequeños saltos a medida que avancemos.
Ok, entonces con ese cambio hecho, vamos a guardar esto volverá a Unity y habrá dos observaciones aquí
que usted tendrá que considerar.
Así que vamos a pulsar el play.
De acuerdo.
Así que ahí están nuestros cerdos.
Ahora, esa es la primera.
Obviamente, estamos añadiendo la dirección o un pequeño vector que apunta en la misma dirección que la dirección.
Y sigue sumando y sigue sumando y sigue sumando.
Así que sigue avanzando porque no le decimos cuándo parar.
Eso está bien por el momento.
Otra cosa, sin embargo, si tenemos este cerdo aquí, por ejemplo, y luego presionamos el play, entonces ambos cerdos
van a llegar a la meta al mismo tiempo.
¿Qué hay de malo en eso?
Bueno, este cerdo obviamente va a tener que trabajar mucho más duro, es decir, ir más rápido para llegar allí, mientras que este
puede ir más lento.
Pero nosotros porque estamos multiplicando por 0. 01 la longitud de este vector en pequeños bits y este vector
en pequeños bits, luego 0. 01 de este vector va a ser mucho más largo que 0. 01 de esto.
Así que todavía va a hacer 100 iteraciones antes de llegar a la meta para ambos.
Así que todavía están haciendo la misma cantidad de bucles de actualización en lugar de moverse a una velocidad consistente,
porque si fueran a una velocidad consistente, este cerdo realmente llegaría allí antes que este cerdo.
Bien, entonces, ¿cómo solucionamos estos dos problemas?
Nos ocuparemos de la velocidad.
En primer lugar, vamos a abrir nuestro código MOVE.
Ahora, en lugar de sumar la dirección multiplicada por 0. 01, que reduce la dirección a la 100ª parte de su tamaño, y por lo
tanto para ambos cerdos, va a ser un tipo de vector de longitud diferente.
Lo normalizamos.
Ahora normalizar un vector es reducirlo a una longitud de uno mantiene la misma dirección, pero va a ser consistentemente
una longitud de uno.
Así que vamos dirección punto normalizado y que devolverá una versión normalizada o una longitud de una dirección.
Bien, guardemos esto.
Cuando ejecutamos esto ahora vas a encontrar que se moverán a la misma velocidad.
Así que eso significa que los cerdos más cercanos van a alcanzar esa meta primero.
Vaya.
Y muy rápido.
De acuerdo.
Debido a la longitud de uno que estamos añadiendo.
Así que podemos frenar un poco eso.
Lo que voy a hacer para que sea aún más consistente aquí es en realidad vamos a subir y añadir otra
línea aquí para que tengas un vector tres velocidad.
Ahora la velocidad va a ser básicamente nuestro vector de dirección y su longitud.
Así que tomaremos esta dirección normalizada aquí y haremos que la velocidad sea igual a eso.
Y entonces podemos multiplicarlo por un factor de velocidad como este.
Y el factor de velocidad podríamos definirlo en la parte superior para ralentizar las cosas.
Bien, pongamos aquí arriba.
La velocidad de flotación es igual a 0. 0 5fk.
Así que eso hará que esta longitud de uno más pequeño, pero consistentemente más pequeño para ambos picos.
Y luego añadiremos la velocidad aquí.
Así que guarda eso.
Asegurémonos de que tengo un punto y coma en eso y ejecutémoslo de nuevo.
Así que los cerdos deberían ser más lentos pero seguir moviéndose al mismo ritmo.
De acuerdo.
Y lo son.
Y este cerdo llega primero a la meta.
Y.
Eso.
Bien, genial.
Así que eso es lo primero.
La otra cosa es hacer esto más consistente una actualización, cualquier bucle de actualización no es una cantidad fija de tiempo en este
caso.
De acuerdo.
Hay hay una actualización fija.
Claro que sí.
Pero queremos que esto sea consistente y suave.
Así que también multiplicamos esto por el tiempo punto delta, que es la cantidad de tiempo que ha pasado desde
que se produjo el último cuadro.
Y eso realmente suavizará su velocidad y tendrá en cuenta que puede haber actualizaciones más
rápidas que se produzcan.
Así que con eso en su lugar, probablemente también encontrarás, porque has multiplicado por esto, que tu velocidad
va a bajar considerablemente y puede que necesites cambiar este valor de velocidad, ¿verdad?
Así que vamos a pulsar el play y ver dónde estamos.
Tenemos que acelerar esto.
También verás que mientras hacemos esto, los cerdos se hunden en el suelo.
Ahora, la razón por la que están haciendo eso y se están moviendo ahora sólo muy, muy lento, es
que el vector desde el cerdo a nuestra meta es en realidad ligeramente hacia abajo.
Por lo tanto, cuando este cerdo realmente golpea aquí, en realidad va hacia abajo y a través de la tierra
y por ahí debido a la naturaleza 3D de este, si desea mantener el cerdo en el plano, entonces usted podría
levantar la posición de la meta para tener la misma posición y como el cerdo.
Y lo veremos en un minuto.
Aceleremos estos cerdos.
Así que si ponemos dos aquí en su lugar y pulsamos play, entonces lo haremos.
Testigo de ese cerdo que se esconde.
Está bien, pero se mueven mucho más suave.
Así que ahora si cogemos uno de los cerdos, echemos un vistazo a la altura.
El cerdo está encendido.
Es como 0. 862.
Si consigues la ubicación de la meta y la pones a 0. 862 y luego ejecutar esto de nuevo, usted encontrará que porque no hay diferencia
en la altura de los cerdos no va a ir a través del suelo.
Se va a quedar en el avión.
De acuerdo.
Con eso funcionando, dejaremos este vídeo aquí cuando volvamos.
En el próximo vídeo, abordaremos el tema de conseguir que el cerdo se detenga en la meta.