是否有可能独立获得精确的点帧率?

时间:2019-09-11 09:12:35

标签: c# unity3d

我想使用Unity获得两点之间的距离的精确点0,而没有公差。

除非我实现公差值,否则

Update和FixedUpdate都会跳过这一点。我想避免这种情况,并真正弄清重点。 下面是我正在使用的代码。

        while (Mathf.Abs((destination - objY.position).x) >= unityDistanceTolerance) 
        {
            DoStuff();
            break;
        }

我想将此“> = unityDistanceTolerance”替换为“ == 0”。现在,当我这样做时,循环永远不会停止,距离永远不会为0。 这个愿望甚至可能吗?如果可以,怎么办?

2 个答案:

答案 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。