在Unity中创建无限循环延迟

时间:2016-12-12 12:32:55

标签: c# unity3d unityscript

我需要在不使用主线程的情况下在Unity中创建无限循环?我看到了一些例子,但它并没有用:

while(true){
         var aa;
         debug.log("print.");
} 

我想添加一些延迟,例如2秒。如果有人知道解决方案,请帮助。

3 个答案:

答案 0 :(得分:9)

首先定义Coroutines

private IEnumerator InfiniteLoop()
{
    WaitForSeconds waitTime = new WaitForSeconds(2);
    while (true)
    {
        //var aa;
        Debug.Log("print.");
        yield return waitTime;
    }
}

然后这样称呼:

 StartCoroutine(InfiniteLoop());

补充说明:

如果您碰巧更改Time.timeScale并且不希望这会影响延迟时间,请使用:

yield return new WaitForSecondsRealtime(2);

答案 1 :(得分:2)

使用它来创建循环;

private IEnumerator LoopFunction(float waitTime)
{
    while (true)
    {
        Debug.Log("print.");
        yield return new WaitForSeconds(waitTime);
        //Second Log show passed waitTime (waitTime is float type value ) 
        Debug.Log("print1.");
    }
}

要调用该函数,请不要使用Update()FixedUpdate(),使用类似Start()的内容,这样就不会创建循环的无限实例;

 void Start()
 {
      StartCoroutine(LoopFunction(1));
 }

答案 2 :(得分:0)

使用协程..

//Call in your Method
StartCoroutine(LateStart(2.0f));

然后写协程就像..

private IEnumerator LateStart(float waitTime)
{
    yield return new WaitForSeconds(waitTime);

    //After waitTime, you can use InvokeRepeating() for infinite loop infinite loop or you use a while(true) loop here
    InvokeRepeating("YourRepeatingMethod", 0.0f, 1.0f);
}

以下是InvokeRepeating()的文档: https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html