Distancia entre dos puntos en Unity

Por GameDevTraum

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, o para activar mecanismos.



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.

jerarquia de un proyecto en unity 3d
Fig. 1: Estos son los GameObjects en la jerarquía de la escena.
script asignado que se encarga de calcular la distancia en unity
Fig. 2: Script que se va a encargar de los cálculos.

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.

distancia entre dos gameobjects en unity
Fig. 3: Así se ve la escena con los objetos.

Preparar Script 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.

campos y metodo start para calcular la distancia entre dos posiciones.
Fig. 4: Campos y método Start del Script para calcular la distancia entre dos GameObjects.

Tenemos campos para asignar los dos objetos, un textmesh para el indicador de distancia, el enum que nos permite elegir qué distancia queremos medir,

metodo update que calcula la distancia entre dos puntos en unity
Fig. 5: Código del método Update.

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.

metodos para calcular distancias en unity
Fig. 6: Métodos para calcular distancias en el espacio y en el plano.

Por último tendremos dos métodos que devuelven la distancia en el espacio y en el plano XY, se observan en la siguiente figura.

Si quieres saber más sobre métodos en programación haz clic aquí.

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.

Video 1: Distancia entre dos objetos en el espacio.

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.

Video 2: Distancia entre dos objetos en el plano.

En el siguiente video podemos ver la diferencia entre estas dos formas de calcular distancias entre objetos en Unity.

Video 3: Comparación distancia entre dos objetos en el plano y en el espacio.

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.

script que se encarga de calcular distancia entre dos vectores en unity
Fig. 7: Script Distances completo.