Unity FixedUpdate与Update的一个简单实验

在Update中,给物体添加一个与重力大小相等,方向相反的力

运行时,Cube上下浮动,飘忽不定

将语句移动至Fixed Update中

运行时,Cube的重力被恰好抵消,保持稳定

可见,与物理计算相关的代码应该放在FixedUpdate中,不然会受到帧率波动的影响

using UnityEngine;

public class PhysicsTest : MonoBehaviour
{
    Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        rb.AddForce(new Vector3(0, rb.mass * 9.81f, 0),ForceMode.Force);
    }

    //void Update()
    //{
    //    rb.AddForce(new Vector3(0, rb.mass * 9.81f, 0), ForceMode.Force);
    //}
}

附:

FixedUpdate

用于物理计算的与帧速率无关的 MonoBehaviour.FixedUpdate 消息。 MonoBehaviour.FixedUpdate 具有物理系统的频率;它被称为每个固定帧率帧。在 FixedUpdate 之后计算物理系统计算。 0.02 秒(每秒 50 次调用)是调用之间的默认时间。使用 Time.fixedDeltaTime 访问此值。通过在脚本中将其设置为您的首选值来更改它,或者导航到编辑 > 设置 > 时间 > 固定时间步长并将其设置在那里。 FixedUpdate 频率大于或小于更新。如果应用程序以每秒 25 帧 (fps) 的速度运行,Unity 大约每帧调用两次,或者,100 fps 会导致大约两个渲染帧和一个 FixedUpdate。从时间设置中控制所需的帧速率和固定时间步长速率。使用 Application.targetFrameRate 设置帧速率。 使用刚体时使用 FixedUpdate。为刚体设置一个力,它会应用每个固定框架。 FixedUpdate 发生在通常与 MonoBehaviour.Update 不一致的测量时间步。 在以下示例中,更新调用的数量与 FixedUpdate 调用的数量进行了比较。 FixedUpdate 每秒执行 50 次。 (游戏代码在测试机器上运行大约 200 fps。)

Unity - Scripting API: MonoBehaviour.FixedUpdate()

扫描二维码关注公众号,回复: 13801984 查看本文章

Update

如果启用了 MonoBehaviour,则每帧都会调用更新。 更新是实现任何游戏脚本最常用的功能。 不是每个 MonoBehaviour 脚本都需要更新。

Unity - Scripting API: MonoBehaviour.Update()

猜你喜欢

转载自blog.csdn.net/weixin_43673589/article/details/124048269