【问题标题】:How often is while(true) called in C# Unity?在 C# Unity 中调用 while(true) 的频率是多少?
【发布时间】:2020-09-10 18:33:26
【问题描述】:

在 C# Unity 中多久调用一次 while(true)?是不是像 Update() 一样,每帧都调用它?

【问题讨论】:

    标签: c# unity3d while-loop


    【解决方案1】:

    除非有中断或屈服(协程),否则它将在单个帧中无限递归。如果您执行类似的操作,则使用协程

    yield return null;
    

    它将继续下一帧。

    【讨论】:

      【解决方案2】:

      它将继续在一帧内进行,将帧时间拉长到无穷大。完好无损时,它会使编辑器崩溃,如果是完整版本,则会导致游戏崩溃。

      【讨论】:

        【解决方案3】:

        答案是一次 ...输入 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 或其他东西来明确停止它)。

        【讨论】:

          猜你喜欢
          • 2021-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多