Update()和FixedUpdate()之间有什么区别,这些区别应该如何应用到控制运动中?

问题描述 投票:-3回答:1

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

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和
  • 它比较适合一般的检测,比如按键。

而该。

  • FixedUpdate() 是每秒呼叫50次
  • 是比较适合游戏对象转换的。

所以,如果我的按键输入检测是在 Update() 办法

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

那么我的旋转代码应该在 FixedUpdate(). 如果是这样,我如何让它在那里运行,同时还能检测到在 Update()?

c# unity3d
1个回答
3
投票

固定更新 是用来与物理系统同步的。 你可以使用 固定更新 施力时(或在你的情况下。移动位置)到a 刚体.

至于你的 旋转,你应该在 更新. 这将为下一帧的渲染提供最准确的位置(即使是 更新 在下一帧之前被多次调用)。) 另外,你应该使用 时间.deltaTime 在你 更新 计算。 像这样。

transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime);

Time. fixedDeltaTime 是为 固定更新.

参考文献。https:/docs.unity3d.comScriptReferenceMonoBehaviour.FixedUpdate.html。

© www.soinside.com 2019 - 2024. All rights reserved.