当我尝试循环递增和打印数字时程序停止响应

Program stops responding when I try to increment and print a number in a loop

我在 C# 中有以下代码:

void Update () {
    for (int m=0;m<122132343243243;m++)
    {
        print(m);
    }
}

当我尝试 运行 时,此 Unity 停止响应。我怎样才能让这个函数完成执行?

您的代码的主要问题是您要求计算机同时完成大量工作,因此它停止响应。数到 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;
    }
}

注意:我还为 int 切换了 long,正如 Daniel 指出的那样 m 的值将溢出,否则你应该让它 [=33] =]足够长的时间。

此代码的主要区别在于它基本上允许程序在每次计数后 "pause" 执行该方法,从而为以后的帧节省其余的工作。这将允许您在计数器增加时继续与程序交互。

希望对您有所帮助!如果您有任何问题,请告诉我。