我在Unity中遇到问题。我的项目需要倒数计时。但是,此倒计时将计数2次。例如,将完成一项工作3秒,完成另一项工作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());
}
请注意,除非发生以下三种情况之一,否则这两种倒计时方法都会永远起作用:
StopCoroutine(...)
被调用,传入StartCoroutine
返回的引用while(true)
循环,否则不会发生)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