【问题标题】:How to Check the time a player is below a y-Coordinate in C#如何在 C# 中检查玩家低于 y 坐标的时间
【发布时间】:2020-09-11 08:19:33
【问题描述】:

我希望我的脚本检查玩家在给定 y 坐标下方的时间。但是,由于我正在检查 FixedUpdate void 中的信息,因此无法直接添加 while 循环。因此,我尝试了以下方法:

void FixedUpdate()
{
if(rb.position.y < 1f)
        {
            checkIfLost();
        }
}

IEnumerator checkIfLost()
    {
        while(rb.position.y < 1f)
        {
            float timeGiven = 5 - Time.deltaTime;

            if(timeGiven <= 0)
            {
                FindObjectOfType<GameManager>().EndGame();
            }

            yield return null;
        }
    }

这不起作用。 我是 Unity C# 的新手,我尝试在网上搜索它,但找不到任何东西。

运行 while 循环并检查玩家在 y 坐标下方的时间有什么更好的选择?

【问题讨论】:

  • 听起来你在 Y 和屏幕底部之间有一个碰撞框,然后进行碰撞检查。
  • 这不是你启动协程的方式,我建议你查看它的文档,也考虑存储你的 GameManager 而不是每次循环都找到它。您是否有理由在 FixedUpdate 中需要它?如果你只是定时更新应该没问题,特别是因为fixedupdate可以在一帧运行多次。您可以拥有所有更新; FixedUpdate、Update、LateUpdate...

标签: c# unity3d if-statement while-loop


【解决方案1】:

只需将浮点变量设置为计数器

private float timer = 0f;

void FixedUpdate()
{
     if(rb.position.y < 1f)
     {
            timer +=Time.fixedDeltaTime;
            if (timer > 5f)
            {
                //do something
                FindObjectOfType<GameManager>().EndGame();
            }
     }
     else
     {
          timer = 0f;
     }
}

如果您想在更新中这样做(更好),只需替换 timer +=Time.DeltaTime;

【讨论】:

  • 我最担心的是固定更新每帧可以运行多次,所以我很好奇为什么他们需要在固定更新中...
  • 从我们的错误中吸取教训......只有少数人阅读书籍或观看教程视频
  • 不知道为什么你的答案被否决了,但它确实回答了这个问题。
  • 哇,很抱歉在这件事上浪费了您的时间。它是如此简单,但我想不出来。非常感谢!!我猜这是漫长的一天。我也将其移至 Update() 而不是 FixedUpdate()。
  • 如果你开心,你就不要浪费我的时间......!欢迎......锁定的最后一天,不要忘记也投票......
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2011-08-13
相关资源
最近更新 更多