在循环期间让编辑器响应

问题描述 投票:0回答:2

我目前正在创建一个调试实用程序,其中一个功能是在短时间内强制挂起整个游戏。

简单循环对我来说是完美的解决方案,但这也阻止了Unity Editor。这是一个非常明显的后果,但非常烦人。

有没有办法在自定义循环期间处理编辑器事件?

void SleepEntireGame(int ms) {
  while( timeReached == false ) {
    // do nothing
    // because all i need is just hold the game in a short period.
    ;

    // I'm looking for something like this:
    UnityEditor.ProcessEvents();
  }
}
  • 请不要推荐任何其他好方法来暂停游戏。谢谢
c# unity3d
2个回答
0
投票

您可以在另一个线程上运行循环并应用事件委托(读取更多here)并注册到编辑器类中的事件处理程序,每当循环结束时,您将在您的线程中触发事件并且您的编辑器线程将被通知,您可以添加加载文本或进度条以向用户显示应用程序正在运行但是ui将保持响应。

如果你想把它提升到一个新的水平,你可以使用取消令牌(阅读更多here)来取消继续循环。


0
投票

您可以在更新函数中使用bool变量来停止游戏功能并使用协程来执行等待操作。

IEnumerator SleepEntireGame(int ms)
{
    sleepGame = true;
    while(timeReached == false)
    {
        yield return null;
    }
    sleepGame = false;
}
© www.soinside.com 2019 - 2024. All rights reserved.