【问题标题】:How to subtract two Vector3 ?I want to measure the distance between two Object如何减去两个 Vector3?我想测量两个 Object 之间的距离
【发布时间】:2020-11-07 21:10:24
【问题描述】:

我想测量两个物体的距离(仅在 Z 轴上),如果这些物体的距离 = 50 然后做点什么……但我不能减去两个 Vector3。

类似这样的:

 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");
 }

【问题讨论】:

  • 你的问题不是你不能减去两个向量,问题是一个。它只给你另一个向量而不是距离和b。您没有正确进行比较(单个 = 是一个分配,== 是比较)。在开始自己的项目之前,您确实应该遵循一些关于 c# 和 unity 的教程。即使您现在看起来不是那样,从长远来看,它也会为您节省大量时间。

标签: c# unity3d


【解决方案1】:

使用 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);
     }

来源:https://docs.unity3d.com/ScriptReference/Vector3.Distance.html

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

【讨论】:

    【解决方案2】:

    如果您只需要并使用 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");
    }
    

    【讨论】:

      【解决方案3】:

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

      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
      
      

      // 代码测试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 2012-04-20
        • 2013-04-25
        相关资源
        最近更新 更多