C# z轴旋转的调试不是0,而在inspector中是0
在检查器中,我的变换的z轴旋转为0 但当我使用以下代码行调试时:C# z轴旋转的调试不是0,而在inspector中是0,c#,unity3d,C#,Unity3d,在检查器中,我的变换的z轴旋转为0 但当我使用以下代码行调试时: Debug.Log("local-Euler-z: " + transform.localEulerAngles.z); Debug.Log("global-Euler-z: " + transform.eulerAngles.z); Debug.Log("local-rot-z: " + transform.localRotation.z); Debug.Log("global-rot-z: " + transform.rota
Debug.Log("local-Euler-z: " + transform.localEulerAngles.z);
Debug.Log("global-Euler-z: " + transform.eulerAngles.z);
Debug.Log("local-rot-z: " + transform.localRotation.z);
Debug.Log("global-rot-z: " + transform.rotation.z);
你可以在我的截图中看到,我没有得到0作为值
首先,你得到的价值非常小<代码>xE+/-y是一个 所以实际上你有这样的东西:
6.349661E-05==0.000063449661
,非常接近实际的零
这个问题来自浮点数的精度,因为编程中浮点数实际上有2个零(-0&+0),这就是工作原理。我不想让这个答案过多,如果你想读一些关于浮动的东西,上面的链接是一个很好的起点
由于这个float
numbers”问题,相同的数字可以用相近的float
类型表示法表示,但仍然不同float->int
对于要比较(比如说)非int度的情况来说并不太好,而且不能比较四元数这样的数字-它的组件(x,y,z,w)
的值介于0和1之间。要解决这个问题,您需要手动地将浮点值与机器零进行“比较”,这对于新手来说有点复杂,另一个解决方案是使用Unity API
顺便说一句,transform inspector显示的是纯零,因为它只会丢弃旋转向量的这些不受影响的数字。使用(int)transform.localEulerAngles.z是用于me@AlpakaJoe,如果我的答案对您有帮助,请将其标记为正确答案。