//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);
}
答案 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);
}
它仍然不执行任何操作就实例化了我的漂移轨迹。