Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Update()和FixedUpdate()之间有什么区别?如何将这些区别应用于控制移动?_C#_Unity3d - Fatal编程技术网

C# Update()和FixedUpdate()之间有什么区别?如何将这些区别应用于控制移动?

C# Update()和FixedUpdate()之间有什么区别?如何将这些区别应用于控制移动?,c#,unity3d,C#,Unity3d,这是我的代码,用于处理游戏对象的简单玩家移动。它允许用户上下左右移动对象,并启用旋转 public class PlayerMovement : MonoBehaviour { public float moveSpeed = 10f; public float rotateSpeed = 10f; public Rigidbody2D rb; Vector2 movement; void Update() { movement

这是我的代码,用于处理游戏对象的简单玩家移动。它允许用户上下左右移动对象,并启用旋转

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 10f;
    public float rotateSpeed = 10f;

    public Rigidbody2D rb;
    Vector2 movement;

    void Update()
    {
        movement.x = Input.GetAxis("Horizontal");
        movement.y = Input.GetAxis("Vertical");

        if (Input.GetKey(KeyCode.Space))
        {
            transform.Rotate(Vector3.forward * rotateSpeed * Time.fixedDeltaTime);
        }
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
    }
}
我的印象是:

  • Update()
    会在每个gametick和
  • 它更适合一般检测,如按键
而且:

  • fixeupdate()
    每秒调用50次
  • 这对于游戏对象转换更好
因此,如果我的密钥输入检测在
Update()
方法中

if (Input.GetKey(KeyCode.Space))
{
    transform.Rotate(Vector3.forward * rotateSpeed * Time.fixedDeltaTime);
}

那么我的旋转代码应该在
FixedUpdate()
中吗。如果是这样的话,我如何让它运行在那里,同时仍然在
Update()
中检测按键?

FixedUpdate用于与物理系统同步。向刚体施加力(或在您的情况下,移动位置)时,可以使用固定更新

至于你的轮换,你应该在更新中进行。这将为下一个渲染帧提供最精确的位置(即使在下一帧之前多次调用Update)。此外,您应该在更新计算中使用Time.deltaTime。像这样:

transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);
Time.fixedDeltaTime用于FixedUpdate

参考: