C# Unity3D:添加矢量3会导致错误的值 简本

C# Unity3D:添加矢量3会导致错误的值 简本,c#,unity3d,C#,Unity3d,我试图将一个向量3添加到另一个向量3,这会导致错误的值并舍入为零,但适用于负值。 我是否遇到了一些奇怪的溢出,如果是这样,有人能解释一下那里发生了什么吗 长版本 我正在从虚拟现实耳机(HTC Vive)收集位置数据,并计算与最后一帧的差异。 我想操纵该值,然后将其添加到其中一个轴的向量3中。 但由于某种原因,对另一个向量3的加法对于正数是失败的 //计算差值适用于浮点、双精度或十进制类型。 //差值为从~0.001到~0.5的值。 十进制差异=(十进制)(位置y-最后位置y); //返回正确的浮

我试图将一个向量3添加到另一个向量3,这会导致错误的值并舍入为零,但适用于负值。 我是否遇到了一些奇怪的溢出,如果是这样,有人能解释一下那里发生了什么吗

长版本 我正在从虚拟现实耳机(HTC Vive)收集位置数据,并计算与最后一帧的差异。 我想操纵该值,然后将其添加到其中一个轴的向量3中。 但由于某种原因,对另一个向量3的加法对于正数是失败的

//计算差值适用于浮点、双精度或十进制类型。
//差值为从~0.001到~0.5的值。
十进制差异=(十进制)(位置y-最后位置y);
//返回正确的浮点和十进制结果。
十进制力=10;
浮动操纵diff=(浮动)(差值*力);
//将其添加到另一个矢量3。现在让我们假设它的矢量为3.0
矢量3其他力=矢量3.0;
Vector3差值=其他力+Vector3.up*操纵差;
//突然,y值变成了0(或者是这么小,我四舍五入到0)
Debug.Log(difference.y);
所以我们假设diff是0.1382741,所以manufacturedDiff是1.382741,但是difference.y是0,而不是1.382741。 但是,一旦diff变为负值,difference.y的值就是正确的

我试图改变结构,在不同的地方创建Vector3对象,一个值一个值地应用它们,但这都导致了相同的问题


我最好的猜测是我遇到了一些溢出,因为Vector3使用浮点数。

这里显示的代码是您正在使用并发现问题的实际代码吗?我想不是。这段代码在我看来很好(除了
decimal
和casting的奇怪用法)。这可能与问题有关,因为可能会导致一些数据丢失。此外,如果
diff
实际上为零,因为从
lastPos
pos
没有变化,该怎么办?好的,谢谢您提供的信息。正如我所说的,我认为代码没有任何问题。您如何断言该值为零?我测试了代码,它完全按照您的预期工作,日志为1.382741。请检查您的问题,并确保您发布的代码复制了您的问题。如前所述,我建议您初始化变量
decimalforce=10.0M因为将整数转换为小数可能会导致问题。提名以结束此问题,直到问题本身中有足够的信息重现它。您在此处显示的代码是否是您正在使用并发现问题的实际代码?我想不是。这段代码在我看来很好(除了
decimal
和casting的奇怪用法)。这可能与问题有关,因为可能会导致一些数据丢失。此外,如果
diff
实际上为零,因为从
lastPos
pos
没有变化,该怎么办?好的,谢谢您提供的信息。正如我所说的,我认为代码没有任何问题。您如何断言该值为零?我测试了代码,它完全按照您的预期工作,日志为1.382741。请检查您的问题,并确保您发布的代码复制了您的问题。如前所述,我建议您初始化变量
decimalforce=10.0M因为将整数转换为小数可能会导致问题。提名以结束此问题,直到有足够的信息在问题本身中重现。