在Unity中制作计时器

时间:2018-11-04 09:14:33

标签: c# unity3d time countdown

我在Unity中遇到问题。我的项目需要倒数计时。但是,此倒计时将计数2次。例如,将完成一项工作3秒,完成另一项工作2秒,然后这些工作将继续。

2 个答案:

答案 0 :(得分:2)

协程(和更多协程)

协程完全可以完成您想做的事情。

private IEnumerator Countdown2() {
    while(true) {
        yield return new WaitForSeconds(2); //wait 2 seconds
        //do thing
    }
}

private IEnumerator Countdown3() {
    while(true) {
        yield return new WaitForSeconds(3); //wait 3 seconds
        //do other thing
    }
}

然后您可以通过调用Start()方法(或任何地方)来启动它们:

void Start() {
    StartCoroutine(Countdown2());
    StartCoroutine(Countdown3());
}

请注意,除非发生以下三种情况之一,否则这两种倒计时方法都会永远起作用:

  1. StopCoroutine(...)被调用,传入StartCoroutine返回的引用
  2. 倒数功能本身返回(除非它突破无限while(true)循环,否则不会发生)
  3. coundown函数本身调用yield break

还要注意,如果两个协程都应在同一时间(例如6秒)恢复,协程2将首先执行(首先启动),除非有其他效果干预(例如,其中一个循环具有另一个{ {1}}指令,其中一个循环终止,等等。

答案 1 :(得分:0)

根据使用示例,您给出了一个对象先右转然后左转的地方:

  

考虑一个对象。程序启动后,向右转3秒钟,   左转1秒后。他们将不断重复。二   计数器将彼此跟随。

下面,我给您提供两个按顺序执行的计时器:第一个计时器将持续3秒钟,第二个计时器则持续2秒钟。一旦一个计数器完成,另一个将启动,这将无限循环地重复。

float counterTask1 = 3f;
float counterTask2 = 2f;
float timer;
bool chooseTask;

void Start(){
    //Initialize timer with value 0
    timer = 0;
    chooseTask = 1;
}

void Update ()
{
    // Add the time since Update was last called to the timer.
    timer += Time.deltaTime;

    // This will trigger an action every 2 seconds
    if(chooseTask && timer >=  counterTask1)
    {
        timer -= counterTask1;
        chooseTask = 0;
        #Do Task 1 Here
    }else if(!chooseTask && timer >= counterTask2)
    {
        timer -= counterTask2;
        chooseTask = 1;
        #Do Task 2 Here
    }
}

我不确定这是否是您想要的。无论如何,已经有很多关于Unity中计时器的问题。检查其中一些: https://stackoverflow.com/search?q=timer+in+Unity