Sur Unity, le calcul de la distance entre deux points peut être réalisée à l’aide de deux méthodes distinctes, selon que l’on travaille dans un contexte 2D ou 3D.
Tout d’abord, pour calculer cette distance, nous avons besoin des coordonnées de ces points, représentées par les structures Vector3 ou Vector2.
Unity Distance, les fonctions statiques
Dans un contexte 3D, la distance entre deux points est obtenue grâce à la méthode Vector3.Distance(Vector3 a, Vector3 b)
.
La valeur retournée est toujours un flottant positif, potentiellement égal à zéro.
Notez que la distance peut être convertie en entier.
Pour nos exemples, j’utiliserai « a » et « b » comme coordonnées de deux points.
using UnityEngine;
public class DistanceMonobehaviour : MonoBehaviour
{
public void DistanceByPoint(Vector3 point)
{
float distance = Vector3.Distance(transform.position, point);
}
Cependant, dans un contexte 2D, on préférera la méthode Vector2.Distance(Vector2 a, Vector2 b)
using UnityEngine;
public class DistanceMonobehaviour : MonoBehaviour
{
private void Start()
{
Vector2 a = new Vector2(0f, 5f);
Vector2 b = new Vector2(1f, 2f);
float distance = Vector2.Distance(a, b);
}
Unity Distance entre deux objets
Sur Unity, la distance entre deux objets peut être calculée à l’aide de la méthode Vector3.Distance
.
Pour commencer, il est nécessaire de récupérer la position de chaque objet, stockée dans le composant transform.
using UnityEngine;
public class DistanceMonobehaviour : MonoBehaviour
{
public GameObject premierObjet;
public GameObject deuxiemeObjet;
public void DistanceBetweenGameObjects()
{
float distance = Vector3.Distance(premierObjet.transform.position, deuxiemeObjet.transform.position);
}
Comment calculer mathématiquement la distance ?
Pour poursuivre notre apprentissage, il est toujours intéressant de savoir comment fonctionne une fonction sous le capot.
En revenant à nos leçons de mathématiques, la formule utilisée pour calculer la distance entre deux points est la suivante : d=√((b.x-a.x)²+(b.y-a.y)²)
Pour nous aider dans nos calculs Unity, nous avons accès aux méthodes :
Voici son application en C# :
public float DistanceByMath(Vector2 a, Vector2 b)
{
float magnitudeX = Mathf.Pow(b.x - a.x, 2f);
float magnitudeY = Mathf.Pow(b.y - a.y, 2f);
return Mathf.Sqrt(magnitudeX + magnitudeY);
}
Distance avec magnitude
Pour continuer dans un contexte plus centré sur Unity, vous pouvez également calculer la distance en soustrayant les deux vecteurs, puis en obtenant leur magnitude.
PS : La magnitude est la longueur du vecteur représentée par √(x²+y²).
Si nous prenons notre spécification avec (a) et (b), nous obtenons alors (a – b).magnitude :
Cela donne un code plus concis que l’approche purement mathématique :
public float DistanceUnity(Vector2 a, Vector2 b)
{
var soustraction = a - b;
return soustraction.magnitude;
}
Conclusion
Bien qu’il soit toujours intéressant de connaître les différentes façons de calculer la distance, les méthodes statiques de Vector3 et Vector2 restent préférables pour cette tâche en raison de leur simplicité d’exécution.
En conclusion, il n’est pas nécessaire de réinventer la roue, Unity possède déjà les bonnes fonctions.