C# 如何减去两个矢量?我想测量两个物体之间的距离

C# 如何减去两个矢量?我想测量两个物体之间的距离,c#,unity3d,C#,Unity3d,我想测量两个物体的距离(仅在Z轴上),如果这些物体的距离等于50,那么做点什么……但我不能减去两个矢量3 大概是这样的: 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 -

我想测量两个物体的距离(仅在Z轴上),如果这些物体的距离等于50,那么做点什么……但我不能减去两个矢量3

大概是这样的:

 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");
 }
使用Vector3.0距离

 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);
     }
资料来源:


或者你可以直接减去z值。如果只计算z值,则无需使用向量函数。

如果只需要并使用z轴,则根本不需要额外的向量

您可以在一个轴上计算距离,如下所示:

Mathf.Abs(transform.position.z - player.position.z);
此外,为了检查“超出范围”,您需要使用“>=”而不是“==”以避免出现错误,例如,在一帧中,您的距离可能从49.9跳到51.1,在这种情况下,使用“==”的代码将失败

因此,最终代码应该是:

public Vector3 distance;

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

这不是你需要的减法,只需计算2个矢量之间的距离3

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


//代码测试

你的问题不是太多,以至于你不能减去两个向量,问题是a。它只给出另一个向量,而不是距离和b。您没有正确地进行比较(single=是赋值,==是比较)。在开始自己的项目之前,您真的应该学习一些关于c#和unity的教程。即使你现在看起来不是这样,从长远来看,它也会为你节省大量的时间。