Input.mousePosition具有4-5位数的十进制精度?

时间:2019-07-16 15:40:55

标签: c# unity3d vector coordinates mouse-position

我需要通过单击“ Fire1”按钮来获取mousePosition的显示坐标。脚本非常简单,我得到了我所需要的。但我希望坐标更精确。

public class exmp : MonoBehaviour
 {
     public void Update()
     {
         if(Input.GetButtonDown("Fire1"))
         {
             Debug.Log(Input.mousePosition.x + ", " +Input.mousePosition.y);
         }
     }
 }

目前,我得到的是“ x,y”或“ x.5,y.0”之类的东西,但是对于项目来说,获得诸如“ x.abcd,y.efgh”之类的东西很重要。在某些示例中,我已经看到这是完全可能的,但我不知道如何做到。

谢谢!

1 个答案:

答案 0 :(得分:1)

Input.mousePosition确实返回了具有Vector3值的float,尽管它以像素坐标表示,但也返回像素位置之间的值。

无论如何,实际上实际上只有打印到控制台的字符串受到较低精度的影响,因为Unity为ToString()Vector3使用了自定义的float实现,该实现应该更易于阅读。 / p>

如果您将这些值用于任何计算,它将使用具有更高精度~6-9 digits的纯float值。


对于打印结帐Standard Numeric Format StringsCustom Numeric format Strings

您可以例如使用

Debug.Log(Input.mousePosition.x.ToString("0.0000") + ", " + Input.mousePosition.y.ToString("0.0000"));

或使用"Fn"

Debug.Log(Input.mousePosition.x.ToString("F4") + ", " + Input.mousePosition.y.ToString("F4"));

为了显示一个float值,精度始终为* 4个小数。

您也可以将#用于可选精度,以便在不需要精度时将其切断,例如为

Debug.Log(1.23001f.ToString("0.00##"));
Debug.Log(1.2301f.ToString("0.00##"));

输出将是

1.23
1.2301