减法C#Unity中Vector3小数精度不佳

时间:2018-07-08 12:43:57

标签: c# unity3d vector 3d

我想知道太空飞船实际上要移动的方向,其运动路径。我就是这样

<div class="profile">
    <img src="https://image.ibb.co/nr3C7T/pic.png">
    <div class="sameline">
      <h2>Title</h2>
      <button>Click</button>
    </div>
    <form method="post">
      <input type="text">
    </form>
  </div>

问题在于飞船的每一帧都不会移动太多,void Start() { prevPos = transform.position; } void FixedUpdate() { Vector3 currPos = transform.position; Vector3 motion = currPos - prevPos; Debug.Log("Current position: " + currPos + " Previous position: " + prevPos + " Difference: " + motion); prevPos = currPos; } currPos(我想)之间的区别在于小数点(prevPos例)。据我了解,向量最多可以保留7位小数,但是0.0530等于(0,0,0)多数帧。

在上面的调试中,我得到了这些结果

当前位置:(0,0,0.5)前一个位置:(0,0,0.4)差异:(0,0,0)

2 个答案:

答案 0 :(得分:1)

Debug.Log函数用于截断Vector3,以使其更具可读性。如果您需要显示所有小数,只需简单地创建一个函数即可连接并显示Vector3的各个组成部分。

void PrintVector3(Vector3 message, int type = 1)
{
    if (type == 1)
        Debug.Log("X: " + message.x + "  Y: " + message.y + "  Z:" + message.z);
    if (type == 2)
        Debug.LogWarning("X: " + message.x + "  Y: " + message.y + "  Z:" + message.z);
    if (type == 3)
        Debug.LogError("X: " + message.x + "  Y: " + message.y + "  Z:" + message.z);
}

此外,将stringVector3连接时,也会丢失小数位。您可以创建一个简单的函数来连接字符串,而Vector3则返回字符串。然后可以使用Debug.Log打印此字符串。

string Concat(string val, Vector3 vec)
{
    return val + " (" + vec.x + ", " + vec.y + ", " + vec.z + ")";
}

答案 1 :(得分:0)

正如 SilentSin 指出的,Vector3.ToString() 正在为您调用。如果自己调用ToString,可以控制舍入的精度。

Debug.Log("Current position: " + currPos.ToString("N4") + " Previous position: " + prevPos.ToString("N4") + " Difference: " + motion.ToString("N4"));
Debug.LogFormat("Current position: {0} Previous position: {1} Difference: {2}", currPos.ToString("N4"), prevPos.ToString("N4"), motion.ToString("N4"));

我发现这对调试很有用,因为我可以控制每个值声明的空间。