FixedUpdate真的能固定时间执行吗

前两天遇到个问题,在低端机型上FixedUpdate真的能做到固定时间执行吗。这个问题,Emm…

我印象中的FixedUpdate,正如我百度的:

然鹅…大概还有一些小伙伴和我遇到了同样的疑惑:

看来看去,还是自己简单测试一下

private void FixedUpdate() {
        index1 ++;
        Debug.Log($"FixedUpdate第{index1}次刷新,增量时间:{Time.deltaTime},真实时间:{Time.realtimeSinceStartup}");
    }
    private void Update() {
        index2 ++;
        Debug.Log($"-----------------Update第{index2}帧,增量时间:{Time.deltaTime},真实时间:{Time.realtimeSinceStartup}-----------------");
    }

如果用增量时间,果然是符合预期的,事实上,这个时间是与真实时间无关的。我们可以在 Edit → Project Setting → Time → Fixed Timestep 设置这个数值
但是真实时间,每次Update之前可能连续迅速执行多次FixedUpdate,也有可能不执行(上图第4帧-第5帧)
FixedUpdate除了用来处理物理逻辑之外并不适合处理其他模块的逻辑

FixedUpdate固定增量时间的原因

在物理模拟中,保证一个固定的增量时间是十分重要的。这是因为在游戏引擎进行物理模拟时要使用数值积分,而作为最简单的数值积分方法——欧拉法在游戏引擎中大量使用。而在游戏引擎的物理模拟中,一个不稳定的增量时间可能导致很多和预期相悖的结果。

固定的增量时间作为一个常量参数传递给物理模拟模块,这样我们就能够保证物理模拟的增量时间固定,同时还能将物理模拟的更新频率和游戏引擎的更新频率进行解耦——物理的模拟不受引擎的更新频率影响,无论游戏的更新频率是多少,传递给物理模拟的增量时间都是一个常量

参考链接一

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值