Unity 3D中的C#mod失败

时间:2018-06-02 22:05:58

标签: c# unity3d

我正在执行以下操作,但不是zRem的预期值为零,而是获得2.384186E-07:

Vector3 t = this.transform.position - _startPosition;
float xRem = t.x % 1;
float zRem = t.z % 1;

在这种情况下:

this.transform.position = 2.5, 0, 3.5
_startPosition = 1.5, 0, 1.5

xRem是正确的,但zRem的值为2.384186E-07。

有关如何解决此问题的任何建议吗?

更新#1 : 使用上面的值时,它不应该进入此块,但由于zRem,它不会进入。

if(!Mathf.Approximately(xRem, 0f) || !Mathf.Approximately(zRem, 0f))
{
     return;
}

1 个答案:

答案 0 :(得分:0)

嗯,mod没有失败......浮点数算术总是涉及一定程度的精度/误差。

我知道,Mathf.Aproximately意味着考虑到这个,但Unity有自己的Epsilon值来比较浮点数,猜猜看,它的值没有记录。

Result of trying to render the Grid

(根据浮点值的表示模型,它可能是系统相关的。也许它符合IEEE标准,我不知道)

事情是:您应该定义符合您的游戏逻辑的阈值使用,如下所示:

if(xRem <= threshold)

或者

if(Mathf.abs(xRem) <= threshold)