unity Vector3.Dot错误的返回值

时间:2019-02-05 13:44:25

标签: unity3d

我正在Unity中编写2D赛车游戏。 现在,我想使用Vector3.Dot函数检查汽车是否在漂移,但是if状态总是返回不等于1的值,因此它总是打印漂移轨迹。即使汽车静止不动或汽车向前行驶,也会发生这种情况。

//Blickrichtung und Fahrtrichtung stimmen nicht überein
    //Driftspuren werden gezeichnet 
    if (1 != Vector3.Dot(myrigidbody2d.velocity, transform.TransformDirection(Vector3.forward)))
    { 
        Instantiate(drifttrack, tireLeft.transform.position, tireLeft.transform.rotation);
        Instantiate(drifttrack, tireRight.transform.position, tireRight.transform.rotation);
    }

2 个答案:

答案 0 :(得分:5)

浮点数并不精确,您很可能永远不会得到1,但是像1.00000000001这样的值对于计算机而言不是1。

您需要使用范围或近似值:

float dot = Vector3.Dot(myrigidbody2d.velocity, transform.TransformDirection(Vector3.forward));
if(Mathf.Approximately(dot, 1f)) { }

https://docs.unity3d.com/2018.2/Documentation/ScriptReference/Mathf.Approximately.html

答案 1 :(得分:0)

谢谢大家的回答。

不幸的是,它不起作用。

首先,我将向量归一化

Vector3 velo = myrigidbody2d.velocity;
velo.Normalize();
Vector3 direc = transform.TransformDirction(Vector3.forward);
direc.Normalize();

然后我将两者进行比较,并检查它们是否不相等:

float dot = Vector3.Dot(velo, direc);
if (!Mathf.Approximately(dot, 1f))
    {
        Instantiate(drifttrack, tireLeft.transform.position, 
        tireLeft.transform.rotation);
        Instantiate(drifttrack, tireRight.transform.position, 
        tireRight.transform.rotation);
    }

它仍然不执行任何操作就实例化了我的漂移轨迹。