【发布时间】:2020-09-10 18:33:26
【问题描述】:
在 C# Unity 中多久调用一次 while(true)?是不是像 Update() 一样,每帧都调用它?
【问题讨论】:
标签: c# unity3d while-loop
在 C# Unity 中多久调用一次 while(true)?是不是像 Update() 一样,每帧都调用它?
【问题讨论】:
标签: c# unity3d while-loop
除非有中断或屈服(协程),否则它将在单个帧中无限递归。如果您执行类似的操作,则使用协程
yield return null;
它将继续下一帧。
【讨论】:
它将继续在一帧内进行,将帧时间拉长到无穷大。完好无损时,它会使编辑器崩溃,如果是完整版本,则会导致游戏崩溃。
【讨论】:
答案是一次 ...输入 while(true) 的帧,假设它没有中断/返回或其他机制来停止它,将是 最后一个 em> 在 Unity 崩溃到您的桌面之前的帧,可能没有警告或错误消息。
我之前曾因意外递归而使 Unity 崩溃,例如编写 public int Number => Number; 而不是 public int Number => number;(无限返回自身的属性),而 Unity 只是默默地崩溃。在您复制并粘贴了一些代码之后,可能很难找到类似的东西。无限循环/递归对主线程上的 Unity 来说基本上是致命的。
您可能从脚本语言中汲取了这个(真正的)想法,以创建一个更简单的游戏引擎,它可以在幕后为您处理很多事情。我以前在“3D Game Studio”引擎中看到过它,很多年前,在他们的“Lite C”脚本语言中。您只需输入while(1),它就会在每一帧上运行您的脚本循环的迭代,并在结束时为您关闭它,非常方便。但是你不能在 C# 中做到这一点。尽管 Unity 将其称为“脚本”,但 C# 仍然是一种编译型编程语言,它完全按照您的要求执行。而 while(true) 告诉它“重复这个循环,直到 true 不再是 true”(这意味着永远),所以循环永远不会结束(除非你使用 break, return 或其他东西来明确停止它)。
【讨论】: