每几秒钟在两个功能的执行之间切换

时间:2018-07-28 06:57:26

标签: c# function unity3d game-development

我正在使用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);
    }
}

2 个答案:

答案 0 :(得分:3)

只需重置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);
}

答案 1 :(得分:0)

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

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