更新与固定更新

Unity 中,Update 和 FixedUpdate 函数都用于更新场景中对象的 behavior,虽然它们的用途相似,但两者之间存在关键区别。

'Update'

'Update' 函数每帧调用一次,非常适合处理 input、更新对象 positions 以及执行大多数通用任务。它不依赖于帧速率,这意味着它的执行时间可能会根据性能而变化。

void Update()
{
    // Input handling
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");
    
    // Movement
    Vector3 movement = new Vector3(horizontalInput, 0, verticalInput);
    transform.Translate(movement * speed * Time.deltaTime);
    
    // General-purpose tasks
    // ...
}

在上面的示例中,我们从水平轴和垂直轴检索输入,并用它来控制对象的移动。'Translate' 方法用于使物体以恒定速度向指定方向移动。通用任务也可以在函数 'Update' 内执行。

'FixedUpdate'

函数 'FixedUpdate' 以固定的时间间隔调用,使其适合处理物理相关的计算。它与帧速率无关,确保不同设备和帧速率之间的行为一致。

void FixedUpdate()
{
    // Physics calculations
    rb.AddForce(transform.forward * forceMagnitude);
    
    // Other physics-related tasks
    // ...
}

在上面的示例中,我们向对象向前方向的 Rigidbody 组件施加恒定的力。使用 'FixedUpdate' 可确保物理计算以固定速率进行,无论帧速率如何。这对于维持稳定的物理模拟非常重要。

'Update' 与 'FixedUpdate'

函数 'Update''FixedUpdate' 之间的主要区别:

  • 'Update' 每帧调用一次,而 FixedUpdate 以固定的时间间隔调用。
  • 'Update' 与帧速率相关,而 FixedUpdate 与帧速率无关。
  • 'Update' 适用于大多数通用任务,包括输入处理、对象移动和非物理相关操作。
  • FixedUpdate 专为物理相关计算而设计,例如施加力、调整刚体属性以及执行其他基于物理的操作。

结论

值得注意的是,'Update''FixedUpdate' 可以共存于同一脚本中,从而允许将物理相关代码与其他通用代码分开。了解差异并在每种情况下使用适当的函数有助于确保 Unity 项目 中的平稳和一致的行为。

推荐文章
Unity MonoBehaviour 指南
在 Unity 中使用运行时动画控制器
Unity C# 中有用关键字列表
在 Unity 中实现键盘和鼠标输入
了解函数和方法调用
Unity C# 脚本语言简介
在 Unity 代码中创建条件语句 (if-else)