我想使用Unity获得两点之间的距离的精确点0,而没有公差。
除非我实现公差值,否则Update和FixedUpdate都会跳过这一点。我想避免这种情况,并真正弄清重点。 下面是我正在使用的代码。
while (Mathf.Abs((destination - objY.position).x) >= unityDistanceTolerance)
{
DoStuff();
break;
}
我想将此“> = unityDistanceTolerance”替换为“ == 0”。现在,当我这样做时,循环永远不会停止,距离永远不会为0。 这个愿望甚至可能吗?如果可以,怎么办?
答案 0 :(得分:1)
这与Update,FixedUpdate或实际上与统一3D无关。您的问题是有限的精度之一,这既是从物理角度而言的计算,也是从更深层次上讲数字表示的不准确性。 一个例子从另一个栈中的问题中被盗
float f1 = 0.09f*100f;
float f2 = 0.09f*99.999999f;
Debug.Log(f1>f2); // returns false
不要指望精确的值
答案 1 :(得分:1)
您可能想尝试Mathf.Approximately()比较两个浮点值。如评论中所述,这种复杂性与Update()
,FixedUpdate()
,Unity3D甚至C#都不相关。它也出现在其他编程语言中,并且总是存在变通方法(例如Mathf。近似或您的实现),而不是完美的精度解决方案。
来自docs.unity3d
浮点数不精确使得使用equals运算符比较浮点数不准确。例如,(1.0 == 10.0 / 10.0)可能不会每次都返回true。大约()比较两个浮点数,如果两个浮点数彼此之间的值很小(Epsilon)之内,则返回true。