在Unity中创建无限循环延迟

ria*_*san 4 c# unity-game-engine unityscript

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

while(true){
         var aa;
         debug.log("print.");
} 
Run Code Online (Sandbox Code Playgroud)

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

Lud*_*ltz 9

首先定义一个协同程序:

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

然后这样称呼它:

 StartCoroutine(InfiniteLoop());
Run Code Online (Sandbox Code Playgroud)

补充说明:

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

yield return new WaitForSecondsRealtime(2);
Run Code Online (Sandbox Code Playgroud)

  • 这种协程对于任何应用程序来说都是不健康的。它会让 GC 发疯。因为您每次迭代都创建一个“YieldInstruction”。如果您在 while 循环之前创建一个 WaitForSecond 实例会更好。 (2认同)
  • @UmairM检查固定答案.应该在while循环之外声明`WaitForSeconds`,GC问题就会消失. (2认同)