C#:如何停止循环
我想了解C#:如何停止循环,c#,unity3d,C#,Unity3d,我想了解coroutine的概念,我不知道为什么代码在print 1,2,3时停止。但是在这个代码循环中,应该运行30次,并打印值1到30 public class NewCore : MonoBehaviour { void Start () { StartCoroutine (MyCoroutine (0.52f)); StartCoroutine (CoroutineKiller (2f)); } IEnumerator M
coroutine
的概念,我不知道为什么代码在print 1,2,3
时停止。但是在这个代码循环中,应该运行30次,并打印值1到30
public class NewCore : MonoBehaviour
{
void Start ()
{
StartCoroutine (MyCoroutine (0.52f));
StartCoroutine (CoroutineKiller (2f));
}
IEnumerator MyCoroutine (float delay)
{
int value = 0;
while (value < 30)
{
yield return new WaitForSeconds (delay);//wait
value ++;
print (value);
}
StartCoroutine (MyCoroutine (delay));
}
IEnumerator CoroutineKiller (float delay)
{
yield return new WaitForSeconds (delay);
StopAllCoroutines ();
}
}
公共类NewCore:monobhavior
{
无效开始()
{
startcootine(MyCoroutine(0.52f));
启动例行程序(CoroutineKiller(2f));
}
IEnumerator例程(浮点延迟)
{
int值=0;
while(值<30)
{
返回新的WaitForSeconds(延迟);//等待
值++;
印刷品(价值);
}
start例程(MyCoroutine(delay));
}
IEnumerator协程器(浮动延迟)
{
产生返回新WaitForSeconds(延迟);
stopallcorroutines();
}
}
您正在打印1-30之间的值,延迟为0.52秒,但2秒后您停止打印(您调用stopallcorroutines
)。这就是为什么你只看到1,2和3打印出来
尝试注释掉start例程(CoroutineKiller(2f))代码>,或者给它更多的延迟,看看它是如何控制流量停止的
协同例程与线程类似——虽然不是真的——但从调用start例程
不会阻塞代码的意义上说是的
所以当你这样做的时候:
void Start ()
{
StartCoroutine (MyCoroutine (0.52f));
StartCoroutine (CoroutineKiller (2f));
}
它实际上会启动这两个协程,并在每次更新调用中一步一步地并排执行它们
如果希望逐个执行协同路由,请尝试以下操作:
void Start()
{
StartCoroutine(F());
}
IEnumerator F()
{
// by yielding the Coroutine, it will block the execution of
// this coroutine (F) until MyCoroutine finishes
yield return StartCoroutine(MyCoroutine(1.52f));
// This is no longer doing much, really.
yield return StartCoroutine(Killer(2f));
print("done");
}
您可以阅读有关的更多信息,其中还包括有关协同程序以及收益系统实际工作方式的信息。您似乎正在使用StopCoroutine(MyCoroutine());在CoroutineKiller中,它在2秒后停止CoroutineKiller。(您的参数是2f,我想您使用它的时间是WaitForSeconds)。因此,您的MyCoroutine函数只工作3个延迟(0.52+0.52+0.52=1.56),在第四个延迟结束之前,您停止此协同例程,只打印1,2,3。但是在开始时()方法startcroutine(MyCoroutine(0.52f)
执行将首先运行第二个方法startcroutine(CoroutineKiller(2f))
将运行。它如何在2秒时自动停止该例程happen@cenkisabi我不知道代码怎么知道当2秒完成时停止coroutine
它跳转到该方法startcroutine(CoroutineKiller(2f))
您的意思是返回运行等待下一次执行和startcroutine()
run parallelstart例程将以“parallel”方式运行,但您可以生成它以等待它。但是您不能在Start
或Update
中生成它,好吗