Unity3d Unity FixedUpdate vs更新物理输入

Unity3d Unity FixedUpdate vs更新物理输入,unity3d,Unity3d,在多个答案中,有人指出更新每帧调用一次,不应用于物理更新,但应用于输入,否则您可能会错过重要事件。 现在出现的问题是,如果我使用更新来影响一个物理对象怎么办? 例如,在释放鼠标时,一些球开始移动和旋转 void Update { if (Input.GetMouseButtonUp(0)) { ball.getComponent<Rigidbody>().AddForce(vector); ball.getComponent<Rigi

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

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

为了获得最佳性能,您应该拆分代码

在里面,你得到输入并将其存储在某个地方。 你在里面计算物理。 在您提到的特定情况下,代码将变为:

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评论后编辑


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

您可能应该在使用一次鼠标后重置mouseDown。。。还有一个有趣的名称,用于实际处理GetMouseButtonUp事件^^^^它是在更新循环中计算的。所以它总是在每次更新时自动重置。只有当我们的FixedUpdate循环比Update循环快时,才会出现问题,无论如何都应该避免。你的意思是反过来。。。通常更新总是比修复更新快。是的,但我肯定会的是的,没错。我们在更新循环中计算mouseUp,它比FixedUpdate更快。我正在编辑我的评论。。。因此,基本上鼠标不需要进一步复位。但是,是的,为什么不添加它呢。FixedUpdate可以在一个帧中调用多次,因此,在不重置的情况下,它可以运行两次,对吗?