我在 C#:
中有以下代码void Update () {
for (int m=0;m<122132343243243;m++)
{
print(m);
}
}
当我尝试运行时,Unity会停止响应。如何让这个功能完成执行?
答案 0 :(得分:2)
您的代码的主要问题是您要求计算机同时执行大量工作,因此它会停止响应。计算高达122万亿是一项冗长的任务,这本身至少需要20天(参见 Counting up to one trillion 进行估算),而且只是因为你打印的事实而复杂化了每个号码。
您需要做的是允许计算机通过使用coroutines将这项工作分散到多个框架上。 (您可以使用另一个线程来防止锁定,但协同程序是解决此问题的简单Unity方法。)
您的代码可以按如下方式重写:
void Start() {
StartCoroutine("CountAndPrint");
}
IEnumerator CountAndPrint() {
for (long m=0; m<122132343243243; m++) {
print(m);
yield return null;
}
}
注意:我还将long
切换为int
,因为Daniel注意到m
的值会溢出,否则会让它运行足够长的时间。
这段代码的主要区别在于它基本上允许程序“暂停”#34;每次计数后执行该方法,保存未来帧的其余工作。这将允许您在计数器增加时继续与程序交互。
希望这有帮助!如果您有任何问题,请告诉我。