【问题标题】:Can Time.deltaTime reach 0?Time.deltaTime 可以达到 0 吗?
【发布时间】:2015-11-14 16:05:11
【问题描述】:

这里是短代码示例

    if (timer < 0)
    {
        timer = cooldown;
    }
    else if (timer > 0)
    {
        timer -= Time.deltaTime;
    }
    else if (timer == 0)
    {
        print(0);
    }

可能是cooldown = 1

我的问题很简单: 是否有可能达到timer == 0 状态? 我的意思是理论上有可能用 Time.deltaTime 精确地达到 0 吗?我知道考虑到 float 的大小这听起来很愚蠢,但如果这种情况发生,我仍然很感兴趣。

【问题讨论】:

  • 这背后的想法是什么?从理论上讲,最后一次减少 Time.deltaTime 可能会导致 timer 为 0,是的。通常,您只需将每个 Update() 的 timer 减少 Time.deltaTime 并查看它是否已经达到负值,检查 timer == 0f 是否为真是不太可能发生的事件。
  • 想法是如果计时器达到负值则停止计时器并从其他事件中重置计时器。它只是为了好玩而做了一些原型设计后我脑海中浮现的概念之一。

标签: unity3d timedelta


【解决方案1】:

Delta 时间不能为零。增量时间是指最后一帧和当前帧之间的时间差。所以理论上不可能为零。也许您的计时器变量可以,但它的机会非常低。我假设您的计时器变量是浮动的,所以当您检查它的 0 是否实际上是 0.000000(类似的东西)时。但是您的计时器变量会像 0.969987 、 0.9525292 、 ...... 、 0.003284598 一样减少,之后它会跳转到负值,例如 -0.01333026。当它变为负值时,您将错过第三个 if 语句。

if (timer <= 0)
{
    timer = cooldown;
    print(0);
}
else if (timer > 0)
{
    timer -= Time.deltaTime;
}

我相信这对您的情况来说是一个更好的解决方案。

【讨论】:

  • 是的,这正是重点。我想错过我的第三个 if 语句来实现停止计时器并等待它从外部重新启动。这就是为什么我问我的计时器是否有可能达到 0。因为如果达到 0,我的概念就会崩溃。所以基本上我只想要 0 值
  • 好吧,它的机会确实很低,但理论上是可能的。
  • 虽然您的回答对于该问题是正确的。请记住设置 Time.timeScale = 0;将导致 Time.deltaTime 将返回 0。我只提到这一点,因为这个答案出现在谷歌搜索“为什么 time.deltaTime = 0”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2021-04-24
  • 2012-08-02
  • 2014-09-19
  • 2014-10-23
  • 2017-09-28
相关资源
最近更新 更多