Bienvenidos de nuevo a esta doble parte sobre el cálculo de una trayectoria.
Ahora tenemos nuestro método de calcular la trayectoria en el script de la cáscara de fuego.
Ahora sólo tenemos que trasladar las fórmulas que vimos en el vídeo anterior aquí para calcular dónde
va a estar ese tanque en la pista para que la bala pueda ser calculada con su velocidad para estar en el mismo
lugar al mismo tiempo.
De acuerdo.
Así que vamos a empezar con este código.
En primer lugar, quiero cambiar esto para devolver un vector tres y luego que el vector tres realmente se establecerá en la
actualización.
Así que este punto de transformación hacia adelante es igual al vector que devolvemos.
De acuerdo.
Así que vamos a empezar por definir todas las entradas para estas fórmulas.
Así que necesitamos un vector tres P, que es la posición del enemigo.
Así que eso va a ser igual a la posición de transformación del punto enemigo.
Ahora tiene que ser relativo al tirador.
Así que vamos a quitar la posición del tirador porque todo esto se está calculando en relación con el tirador,
lo que significa que usted tiene una especie de conseguir todas las coordenadas del enemigo en su espacio
local tiradores.
Entonces necesitamos nuestro vector para v.
Así que tres v que es nuestro vector de avance y la velocidad de nuestro enemigo.
Así que el punto enemigo transforma el punto hacia adelante multiplicado por la velocidad del enemigo.
Así que el punto enemigo obtener componente y vamos a obtener la secuencia de comandos de la unidad y luego agarrar la velocidad de allí y entonces
vamos a obtener la velocidad de la bala.
Así que float s es igual a punto de bala obtener componente mover cáscara y la velocidad de punto allí.
Muy bien, ahora tengo un pequeño problema para recordar si conseguí que pusieras al enemigo en los primeros
puestos.
Tenemos que pasar a través del enemigo para poder utilizar el valor.
Así que comprueba si lo tienes.
Si no lo has hecho, ponlo ahí.
De acuerdo.
Así que ahora pasando, vamos a crear A, B, C y D de nuestra fórmula cuadrática.
Así que el flotador a será igual al vector 3.. de V y V menos s.
Multiplicado por.
Sí.
Y puedes ver dónde está eso en la fórmula.
Entonces necesitamos un flotador para B y necesitamos un flotador para C.
De acuerdo.
Así que este es un reto para ti es llegar a las fórmulas para B y C.
Ponga en pausa el vídeo ahora, inténtelo y volveremos.
Seguiremos escribiendo a través de esto.
De acuerdo.
¿Cómo te fue con ellos?
Bueno, en realidad ambos son productos punto, así que será un vector 3.. y B es P y V y entonces C va a ser un vector
3.. producto.
Para P y p.
De acuerdo.
Entonces podemos añadir D, así que floto D y eso va a ser igual a B por B o B al cuadrado menos C por A.
Y en la fórmula en realidad tiene C, A, veces C, esto es dentro de su raíz cuadrada así.
Así que podemos aprovechar que hay cuatros y dos en ellos y cancelar esos valores,
que es lo que puedes hacer si estás derivando estos valores de fórmulas cuadráticas.
Así que realmente necesitamos, en primer lugar, averiguar cuál es el valor de D.
Si D, que es lo que está debajo de la raíz cuadrada va a ser un número pequeño.
Vale, entonces la bala no va a ser lo suficientemente rápida para alcanzarla, en cuyo caso podemos devolver como
cero o algo así.
Así que vamos a ir.
Si D es inferior a 0. 1 F, entonces podemos devolver el vector 3. 0.
De acuerdo.
Ahora, si seguimos con esto, tenemos que calcular cuál es el elemento de la raíz cuadrada real.
Así que la raíz cuadrada del flotador es igual a la raíz cuadrada del punto masivo de DX.
De acuerdo.
Ahora bien, hemos averiguado previamente, a partir de nuestra ecuación de la raíz de nuestras cuadráticas, que hay dos valores posibles porque
hay un valor positivo en un valor negativo, por lo que pueden ser dos.
Así que nos interesa saber cuáles son esos dos valores, y luego queremos elegir el mejor.
Así que queremos que el tiempo de flotación uno va a ser igual y el primero será menos B, menos la raíz
cuadrada dividida por C y el tiempo de flotación dos va a ser igual a qué tiempo para otro desafío?
En qué se convertirá esta segunda raíz de la cuadrática fuerza video.
Ahora, inténtalo.
Y cuando volvamos, seguiré escribiendo a través de él.
Sí.
¿Cómo te fue?
Bueno, la fórmula es B negativo más o menos la raíz cuadrada, bla, bla, bla.
Así que éste será B negativo más la raíz cuadrada dividida por C.
De acuerdo.
Así que ahora tenemos estos dos valores.
Podemos averiguar cuál queremos usar realmente.
Así que vamos a crear un flotador para el tiempo real que vamos a utilizar y vamos a establecer que inicialmente a cero.
Entonces vamos a decir que si t uno es menor que cero y T dos es menor que cero, entonces no hay solución aceptable.
Así que en este caso pondremos t igual a cero.
¿De acuerdo?
Si t uno es menor que cero, entonces t será igual a t dos.
Otra cosa.
Si PT dos es menor que cero, entonces t será igual a t uno en caso contrario.
Utilizaremos el valor máximo que estamos sacando de ahí.
Así que pondremos t igual a math, f max, new float y luego t1t2.
Así que la matemática f max toma un array de floats y te devuelve el valor máximo que puedes usar un poco más rápido y más
fácil que venir con una declaración if then else que haga eso.
Pero, por supuesto, también puedes hacerlo.
Ahora, después de pasar por esta pequeña lógica, vamos a devolver T multiplicado por
P más V.
Así que, básicamente, vamos a utilizar nuestro tiempo para multiplicar nuestros valores con el
fin de calcular dónde se van a cruzar la bala y el enemigo.
Y cuando lo hagan, usaremos eso como el vector que enviaremos a la dirección de avance de los tanques
para que puedan apuntar en esa dirección.
De acuerdo.
Así que creo que estamos listos para guardar esto y probarlo.
Así que vamos a guardarlo.
Volvamos a la unidad ahora.
He cambiado mi gran color a negro para que se pueda ver lo que está pasando.
Si nos dirigimos al tanque, recordemos nuestro script de cáscara de fuego y lo que tiene que ir en el inspector.
Tendrás un proyectil, la torreta, y luego querrás a tu enemigo.
Así que arrastra y suelta a tu enemigo desde la jerarquía hasta allí.
El propio enemigo.
No hemos cambiado nada al respecto.
He aumentado la velocidad a tres sólo para que vaya un poco más rápido cuando estemos probando.
Además, he bajado al prefabricado de shell y he cambiado su script de shell de movimiento a tres también ahí abajo.
Bien, pues vamos a probar esto pulsando el play y en cuanto se ponga en marcha, le daré a la barra espaciadora
y veremos si interceptamos el tanque.
Sí.
Ahora, en algún momento, puedes ver aquí que las cosas se han caído porque no podemos calcular una
trayectoria real.
Si vuelvo a pulsar el botón de reproducción y disparo un montón de balas, verás que se arquean a través
de la pantalla y que, a medida que el tanque se mueve, pasa por todas ellas hasta que llega un punto en el que nuestras matemáticas
se rompen.
Bueno, no se rompe.
Aquí es cuando vamos a obtener valores muy, muy pequeños e inexactos.
Así que ahí es donde se rompió por primera vez.
Si salimos de aquí, estas balas van a ser el último lote que se cruce con este tanque.
Cuanto más lejos se vaya, más lejos estará.
Ahora bien, eso puede ser un poco problemático.
Así que probablemente no queramos que eso ocurra.
También en este punto, porque estamos devolviendo cero cuando obtenemos valores que no nos interesan y estamos tratando
de establecer el vector de avance del tanque a eso.
Estamos recibiendo un vector de visualización de la rotación de la mirada es cero error.
Así que vamos a volver a nuestro código y arreglar eso.
De acuerdo.
Así que estamos devolviendo el cero aquí, que es donde está nuestro problema.
Vamos a bajar a la actualización y vamos a almacenar el valor devuelto primero.
Así que iremos al vector tres, apuntaremos a igual, calcularemos la trayectoria y luego podremos probar si apuntar a igual al
vector 3. 0.
O debería decir que si no es igual al vector tres cero, entonces lo usaremos para fijar nuestra transformada hacia adelante.
Así que apunta hacia abajo.
Además, si ponemos T a cero, tampoco nos interesa.
Así que en lugar de hacer eso, vamos a subir aquí y vamos a devolver el vector cero allí.
Bien, guardemos esto y hagamos un intento más.
¿De acuerdo?
Así que empieza a darle a la barra espaciadora y cuando llegue a lo más lejos posible,
dejará de enviar balas.
Pero se puede ver como el tanque se arquea alrededor, en realidad va a pasar y golpear todas esas balas.
De acuerdo.
Así que es un simple.
Sí, sencillo.
Esa es probablemente una de las formas más sencillas de calcular el impacto de un proyectil que no implica la
aceleración y la gravedad, que se convierten en algo mucho más complejo.
Así que ese es el comienzo.
Y puedes imaginar que las matemáticas a partir de aquí para cosas más complejas se complican aún más.
Y cuando volvamos en la siguiente, empezaremos a ver la aceleración antes de ver más trayectorias.