Unity 因 For 语句而崩溃

Unity Crashes Because of For Statement

我添加了这个for语句后,Unity崩溃了,我重新打开并重新运行了几次,但它仍然崩溃。这是 for 语句:

for (i = 0; i < 20; i++)
{
    player.transform.position += Vector3.right * -1;
    i = 0;
}

你的循环是 运行 无限循环。在每次迭代中,您将计数器变量设置回 0,因此它永远不会停止并不断减少您的玩家位置。您是否尝试过在某一时刻强制循环退出以查看您的程序是否仍然崩溃?

您的代码导致无限循环。如果你想有一个延迟的重复功能,你可以使用 Coroutine. The YieldInstructionyield return new WaitForSeconds(waitTime) 在统一文档示例中)确定你希望等待的时间量。文档中的示例代码延迟2秒无限打印;但是,重写 while 循环的条件是帮助您确定协程何时结束的方法之一。

实现它的另一种方法是使用 async/await。但是,可用于 await 的指令不如 yield 指令丰富。此外,我上次检查时,有一段带有打印语句的真实代码,即使当 unity 不再处于播放模式时也会继续打印。

嗯,当然你程序崩溃了,你有一个无限循环,因为总是重置

i = 0;

这基本上等同于

while(true)
{
    // move
}

因为你永远不会退出这个循环,所以你永远不会允许 Unity 继续执行它 -> 在同一个 Unity 主线程中运行的应用程序和整个 Unity 编辑器完全冻结。


既然你说你希望这一切无限发生,那么你更想要的是将其移动到 Update which is called once every frame and then use Tim.deltaTime 以将固定的 value per frame 转换为 value per second

// Speed in Units per second
// adjust this via the Inspector
[SerializeField] private float speed = 1;

private void Update()
{
    player.transform.position += Vector3.left * speed * Time.deltaTime;
}