Este es Stevie.
Está aquí para demostrar lo importante que es entender los vectores para programar el movimiento en los juegos.
Tanto si quieres mover a un PNJ como si quieres hacer girar a un personaje, entender su funcionamiento es esencial
para garantizar que tu juego se comporta como pretendes.
Un personaje 3D tiene dos espacios vectoriales uno que es local y otro que es el mundo.
Cada espacio está definido por los ejes X, Y y Z.
A veces estos espacios se alinean, pero la mayoría de las veces no.
Por ejemplo, como se muestra aquí, el eje Z local de Stevie está apuntando en una dirección diferente a la del mundo.
Z.
En la unidad, la orientación del espacio del mundo está representada por un pequeño sistema de ejes en la parte superior derecha de
la ventana de la escena.
Para ver los ejes locales de un modelo 3D, puedes seleccionar el personaje y pulsar la tecla W para revelar los ejes
X, Y y Z.
Un modelo no se alineará con el mundo si tiene algún valor distinto de cero.
Como su movimiento de rotación en cualquier espacio puede ser definido por un vector, se representan por una flecha que
tiene una dirección y una longitud llamada la magnitud.
La dirección se especifica por el número de pasos en X, Y y Z.
El vector cubre, por ejemplo, en 2D.
Este vector abarca tres pasos en la X y dos pasos en la Y, por lo que se representa con la dirección.
Tres a su magnitud se calcula utilizando el teorema de Pitágoras.
Se toma la raíz cuadrada de la suma de ambas coordenadas al cuadrado o la raíz cuadrada de x al cuadrado
más y al cuadrado.
En este caso, sería la raíz cuadrada de tres al cuadrado más dos al cuadrado, lo que da como resultado 3. 6.
Podemos decir entonces que el vector tres dos tiene una magnitud de 3. 6.
Un vector en tres dimensiones tiene exactamente las mismas propiedades con la adición del valor del eje z.
Por lo tanto, está representado por los pasos en x, y y Z.
Este vector sería para uno.
Su magnitud sería la raíz cuadrada de cuatro al cuadrado más uno al cuadrado más dos al cuadrado o 4. 6.
Un vector no tiene una posición inicial establecida.
Simplemente representa una dirección.
El mismo vector puede aparecer en cualquier lugar.
Esto los hace útiles para especificar el movimiento de un personaje del juego.
Si se añade un vector a la posición del personaje del juego, éste se moverá a una nueva ubicación.
Cada uno de los valores X, Y y Z se suman a la posición actual del personaje en la unidad.
Podemos hacerlo con una sentencia translate.
Es elemental realizar esta operación en la cabeza donde la nueva posición es la posición inicial
más el vector.
Cuando se añade un vector a una posición, el resultado es una nueva posición en la que se han
añadido los valores X, los valores Y y los valores Z.
Sin embargo, si se añade el mismo vector a dos personajes diferentes en lugares distintos, cada uno se moverá exactamente
la misma cantidad.
Tenga en cuenta que no terminarán en el mismo lugar.
Se trata simplemente de añadir los mismos pasos a las posiciones x, y y z.
Y como empiezan en una posición diferente, el resultado de sumar el mismo vector será diferente.
Sin embargo, como los vectores utilizados son exactamente los mismos, los personajes se moverán en paralelo.
A menudo, al diseñar un PNJ, querrás que el personaje se mueva a un lugar de destino.
Incluso el vagabundeo aparentemente aleatorio requiere algún punto en el mundo al que el personaje pueda dirigirse.
Para ello hay que calcular el vector entre el personaje y su objetivo.
El vencedor se encuentra alejando la posición del personaje de la posición objetivo.
Una vez que tengas el vector, puedes usarlo para mover a tu personaje hacia su objetivo.
Si quieres que un personaje se mueva poco a poco a lo largo de un vector, entonces no puedes añadir todo el vector
de una sola vez.
Es necesario añadir un vector mucho más corto que apunte en la misma dirección y añadirlo con cada bucle de actualización
para dar la apariencia de movimiento para encontrar un vector que sea más corto que un vector dado pero que apunte en
la misma dirección, lo dividimos por algún valor.
Por ejemplo, si quieres un vector que tenga la mitad del tamaño del original, lo dividirías
por dos.
Este nuevo vector tiene como coordenadas las X, Y y Z del original.
Todo dividido por dos.
Y aunque las coordenadas del vector cambien, sigue estando orientado en la misma dirección.
Pero, ¿en qué medida se debe dividir un vector para el movimiento de un personaje?
Si se divide el vector por cuatro y se añade el vector más pequeño en cada actualización, el personaje tardaría cuatro actualizaciones
en alcanzar su objetivo.
Aquí está Stevie probando algunos divisores diferentes para su vector de meta.
Te darás cuenta de que cuanto más pequeño sea el divisor, menos se actualizará Stevie para llegar a la abuela.
Además, esto hace que se mueva mucho más rápido.
A medida que los divisores aumentan, el movimiento se vuelve más fluido y ella cubre la distancia en un tiempo más largo.
Si divides un vector objetivo por un número fijo cada vez, entonces la velocidad del MPC cambiará dependiendo
de la distancia.
En este caso, se puede ver que dividiendo ambos escenarios por diez se obtendrán vectores más pequeños, pero el vector más pequeño
en la distancia más larga será más largo que los vectores más pequeños para la distancia más corta.
Aquí está Stevie poniéndolo en práctica.
En ambos ejemplos, el vector de orientación se divide por mil.
Esto le da a Stevie 1000 actualizaciones para llegar a su meta, ya que tiene una gran distancia que cubrir en el mismo número
de bucles en el fondo.
En el fondo se moverá mucho más rápido.
Por lo tanto, en lugar de dividir todos los vectores objetivo en la misma cantidad, queremos reducir los vectores más
pequeños a un tamaño estándar de manera que todos tengan la misma longitud.
Y este tamaño estándar es uno.
Podemos encontrar una longitud, un vector que apunta en la misma dirección que un vector mayor dividiendo
el vector mayor por su magnitud.
Este proceso se llama normalización.
Cuando Stevie utiliza el vector normalizado para actualizar su movimiento, no importa la distancia que tenga
que recorrer, se moverá con una velocidad constante.
Unity hace que trabajar con puntos y vectores sea sencillo a través de su vector tres.
Clase A El vector tres tiene un valor X, Y y z que representa las coordenadas del vector.
Si estás familiarizado con unity, entonces ya habrás utilizado las propiedades del vector tres, ya que la transformación
de los objetos del juego utiliza el vector tres para los datos de posición y escala.
Puedes calcular el vector de un personaje a un objetivo restando uno del otro.
Esto dará lugar a un vector.
Es fácil encontrar la longitud de este vector utilizando la propiedad de la magnitud para obtener la versión normalizada que
simplemente se utiliza.
Los vectores normalizados son un concepto extremadamente poderoso y hay mucho que aprender.
Pero ahora que ya tienes unos cuantos consejos en tu haber con respecto a su uso para mover un personaje, lo mejor
es que empecemos con algunos ejercicios prácticos.