Unity FixedUpdate vs输入的更新物理

时间:2019-07-09 13:46:59

标签: unity3d

在多个答案中,都提到Update每帧被调用一次,不应该用于物理更新,但是应该用于输入,否则您可能会错过重要事件。 现在出现的问题是如果我Update影响物理对象怎么办? 例如,在释放鼠标时,一些球开始移动并旋转。

void Update
{
    if (Input.GetMouseButtonUp(0))
    {
       ball.getComponent<Rigidbody>().AddForce(vector);
       ball.getComponent<Rigidbody>().AddTorque(vector2);
    }
}

1 个答案:

答案 0 :(得分:1)

要获得最佳性能,您应该拆分代码。

  • Update内,您得到输入并将其存储在某处。
  • FixedUpdate内,您可以计算物理量。

在您提到的特定情况下,代码将变为:

bool mouseUp = false;

void Update()
{
    mouseUp = Input.GetMouseButtonUp(0);
}

void FixedUpdate()
{
    if (mouseUp)
    {
       ball.getComponent<Rigidbody>().AddForce(vector);
       ball.getComponent<Rigidbody>().AddTorque(vector2);
       mouseUp = false;
    }
}

-------------
编辑(在derHugo和Wouter Vandenputte评论之后)

在某些情况下,FixedUpdate可能会被多次调用一帧。因此,使用后重置该值更安全。在示例情况下,通过添加mouseUp = false