【问题标题】:Switch between execution of two functions every few seconds每隔几秒在两个函数的执行之间切换
【发布时间】:2018-07-28 06:57:26
【问题描述】:

我正在使用 Unity 和 C#。我的游戏会无限运行,除非玩家被摧毁。

如何每隔几秒钟在两个函数的执行之间切换,目前我使用的是 if 语句,但我不能这样做,因为游戏永远运行并且需要无限数量的条件。

我想在几秒钟后交替执行这两个 if 语句下的代码。

那么,我该如何实现呢?

private void Update () 
{
    timeelapsed += Time.deltaTime;
    Debug.Log(timeelapsed);

    if (timeelapsed >= 20f && timeelapsed <= 40f)
    {
        LinearSpawnerLeft.SetActive(false);
        CurveSpawnerLeft.SetActive(true);

    }
    if (timeelapsed > 40f && timeelapsed <= 60f)
    {
        CurveSpawnerLeft.SetActive(false);
        LinearSpawnerLeft.SetActive(true);
    }
}

【问题讨论】:

  • 你能展示那些 if 语句吗?将它们编辑到您的问题中
  • 刚刚添加了 if 语句

标签: c# function unity3d game-development


【解决方案1】:

只需重置timeelapsed 变量:

void Update () {
    timeelapsed += Time.deltaTime;
    Debug.Log(timeelapsed);

    if (timeelapsed < 20f)
    {
        LinearSpawnerLeft.SetActive(false);
        CurveSpawnerLeft.SetActive(true);
    }
    else
    {
        CurveSpawnerLeft.SetActive(false);
        LinearSpawnerLeft.SetActive(true);
        if (timeelapsed >= 40f) timeelapsed = 0f;
    }
}

如果您不想更改 timeelapsed 的值,您可以这样做:

int quotient = (int)timeelapsed / 20;
if (quotient % 2 == 0)
{
    LinearSpawnerLeft.SetActive(false);
    CurveSpawnerLeft.SetActive(true);
}
else
{
    CurveSpawnerLeft.SetActive(false);
    LinearSpawnerLeft.SetActive(true);
}

【讨论】:

  • 我希望第二组语句也执行一段时间,我不想立即再次切换到第一组
  • 已编辑。请检查。
  • 我会将if &gt;= 40, timeelapsed = 0 更改为if &gt;= 40, timeelapsed -= 40 以避免微时间在很长一段时间内累加(您的时间永远不会正好是 40,并且每个周期修剪的任何数量都会累加)。可能对提问者不重要,但可能对其他人很重要。
【解决方案2】:

最优雅的方式是使用内置的协程机制

WaitForSeconds waiter = new WaitForSeconds(20);
IEnumerator Start()
{
  while(true)
  {
   DoOneThing();
   yield return waiter;
   DoAnotherThing();
   yield return waiter;
 }
}

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 2021-12-15
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2021-07-23
    • 2019-10-13
    相关资源
    最近更新 更多