Introducción
En este artículo vamos a ver distintas formas para calcular la distancia entre dos objetos en Unity, esto puede ser útil por ejemplo para saber a qué distancia está el personaje de un punto de interés y así poder llevar a cabo una acción como podría ser activar un mecanismo.
Tengo un vídeo en el que muestro cómo calcular la distancia entre dos objetos
En este vídeo muestro dos métodos para conocer la distancia entre dos objetos en Unity, junto con mucha información extra como por ejemplo datos sobre programación, cómo escribir la distancia entre dos objetos en consola y en la interfaz gráfica.
Preparar la escena
Vamos a armar una escena muy simple que tendrá dos esferas con textos en 3D para indicar el número de la esfera y la distancia que hay entre ambas.
La cámara tendrá asignado el Script Distances que es el que hará los cálculos de distancia y escribirá los valores en pantalla. Como extra tendrá un Line Renderer para dibujar una línea desde un objeto al otro. Hay campos para ambos objetos y para el indicador de distancia. Además tenemos un enum que nos permite elegir que tipo de distancia queremos calcular.
Preparar el script para calcular distancia – Nombre: «Distances»
El Script que va a resolver los cálculos lo he llamado Distances (Script completo al final del artículo), en la siguiente figura se muestran los campos definidos en este Script junto con el método Start.
Tenemos campos para asignar los dos objetos, un textmesh para el indicador de distancia, el enum que nos permite elegir qué distancia queremos medir,
En el método Start encontramos la referencia del Line Renderer asignado al GameObject cámara.
En el método Update vamos a hacer los cálculos, podemos ver a continuación cómo está programado.
Por último tendremos dos métodos que devuelven la distancia en el espacio y en el plano XY, se observan en la siguiente figura.
Artículo sobre métodos en programación, tipos de métodos y ejemplos
Calcular distancia entre dos objetos en el espacio – Vector3
Para empezar vamos a ver cómo calcular la distancia que hay entre dos objetos en el espacio, es decir considerando las tres dimensiones de la escena.
El método CalculateDistanceInSpace de la figura 6 es el que se encarga de esto. Como se observa, se utiliza el método Distance de la clase Vector3 y como parámetros se envían los dos vectores de tres dimensiones que queremos saber a qué distancia están, estos vectores son la posición de cada objeto.
Calcular distancia entre dos objetos en el plano – Vector2
Si estamos trabajando en 2D o si nos interesa conocer la distancia entre dos objetos proyectados sobre un plano, podemos calcular esta distancia usando solamente dos dimensiones de la escena.
El método CalculateDistanceInXYPlane de la figura 6 es el que se encarga de esto. Como se observa, se utiliza el método Distance de la clase Vector2, se construyen dos vectores usando solo las componentes x e y de la posición de los objetos y se pasan como parámetros al método Distance de Vector2.
En el siguiente video podemos ver la diferencia entre estas dos formas de calcular distancias entre objetos en Unity.
Conclusión
Hemos visto cómo utilizar las clases Vector3 y Vector2 para calcular distancias entre objetos en el espacio y en el plano respectivamente.
En general en Unity se trabaja en el espacio 3D, por lo tanto para medir distancias en dos dimensiones es necesario proyectar los puntos en algún plano. Hay que tener en cuenta que hay varios planos que podemos tener en cuenta, en este caso vimos el plano XY, pero podríamos usar el plano XZ o YZ.
Anexo
Aquí se puede ver el Script completo que calcula la distancia entre dos objetos en Unity.