2
votes

Comment soustraire deux Vector3? Je veux mesurer la distance entre deux objets

Je veux mesurer la distance de deux objets (uniquement sur l'axe Z) et si la distance de ces objets est = 50 alors fais quelque chose ... Mais je ne peux pas soustraire deux Vector3.

quelque chose comme ceci:

 Vector3 Bullet;
 Vector3 player;
 public Vector3 distance;

 Bullet = new Vector3(0f, 0f, transform.position.z);
 Player = new Vector3(0f, 0f, player.position.z);

 if (distance = Bullet - Player)
 {
 Debug.Log("out of range");
 }


1 commentaires

votre problème n'est pas tellement que vous ne pouvez pas soustraire deux vecteurs, le problème est un. qu'il ne vous donne qu'un autre vecteur et non la distance et b. que vous ne faites pas les comparaisons correctement (single = est une affectation, == est la comparaison). vous devriez vraiment suivre quelques tutoriels à la fois sur c # et unity avant de commencer votre propre projet. même si cela ne vous paraît pas comme ça maintenant, cela vous fera gagner énormément de temps à long terme.


3 Réponses :


2
votes

Utilisez Vector3.Distance.

 Vector3 bullet = new Vector3(0f, 0f, player.position.z);;
 Vector3 player = new Vector3(0f, 0f, transform.position.z);
 public float distance;


    if (distance >= Vector3.Distance(other.position, transform.position))
     {
      print("out of range: " + dist);
     }

source: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html

Ou vous pouvez réduire directement les valeurs z. Il n'est pas nécessaire d'utiliser des fonctions vectorielles si vous ne calculez que les valeurs z.


0 commentaires

1
votes

Si vous avez besoin et n'utilisez que l'axe Z, vous n'avez pas du tout besoin de vecteurs supplémentaires.

Vous pouvez calculer votre distance sur un axe comme ça:

public Vector3 distance;

if (Mathf.Abs(transform.position.z - player.position.z) >= distance)
{
    Debug.Log("out of range");
}

Et aussi pour vérifier "hors de portée", vous devez utiliser "> =" au lieu de "==" pour éviter les bogues lorsque, par exemple, dans une image, votre distance pourrait passer de 49,9 à 51,1, et coder avec " == "échouera dans ce cas.

Le code final devrait donc être:

Mathf.Abs(transform.position.z - player.position.z);


0 commentaires

0
votes

ce n'est pas une soustraction dont vous avez besoin, calculez simplement une distance entre 2 vecteurs3

const v3Obj1 = { x: 10, y: 10, z: 75 }
const v3Obj2 = { x: -10, y: 15, z: 75 }

function distance(x0, y0, z0, x1, y1, z1) {
  let deltaX = x1 - x0
  let deltaY = y1 - y0
  let deltaZ = z1 - z0
  let distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ)
  return parseFloat(distance)
}

console.log(
  distance(v3Obj1.x, v3Obj1.y, v3Obj1.z, v3Obj2.x, v3Obj2.y, v3Obj2.z)
) // return {Float} 20.615528128088304

// code testé


0 commentaires