我需要在不使用主线程的情况下在Unity中创建无限循环?我看到了一些例子,但它并没有用:
while(true){
var aa;
debug.log("print.");
}
我想添加一些延迟,例如2秒。如果有人知道解决方案,请帮助。
答案 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