Ign*_*rre 8 c# unity-game-engine
我只是犯了一个愚蠢的错误而且在里面void Update()而不是写if(var)我写的while(var)并且var从未修改过,所以我最终在我的内部编写了一个无限循环Update()
故事本身并不重要.重要的是我无法停止播放模式.实际上,在重新启动之前,我无法用Unity做任何其他事情.
所以我的问题是,有没有人知道如何优雅地停止Unity中的播放模式?是否有任何快捷方式或某些代码行强制超时?
我知道最好的方法是避免无限循环,但有些事情你可以做出愚蠢的错字.
额外注意:我一直在寻找这个问题的解决方案一段时间,遗憾的是没有成功.但是我找到了这个问题的副作用的解决方案.当你按下ctrl-alt-del时,你可以放弃你在场景中保存的所有东西(这可能是工作小时数).
所以当你点击播放时Unity会自动保存,并且Temp folder只要你在强制退出后没有再次运行Unity,场景备份就会出现.
小智 15
以下对我有用(@LinusR 的道具和扩展@Kinxil)这只是一个快速的分步说明。
[LinusR 的解决方案似乎是最防弹和通用的。]
Thread.SpinWait.SpinUntil(() => someObject.NeverTrue());
someObject = null;Lin*_*usR 11
我刚刚陷入了这种情况:意外的无限循环,在未保存工作的场景中陷入播放模式,Unity 无响应。
但是我很幸运能够打开 Monodevelop,尽管我主要使用 Sublime 来编写脚本。我按下了 Monodevelop 窗口左上角附近的按钮开始调试,然后按下暂停按钮。执行在我的无限循环中间的一条线上暂停。Windows 任务管理器确认 Unity 不再锁定 CPU。
在 Monodevelop 中,我能够找到obj下一行将尝试调用方法的对象,并使用“立即”窗口执行obj = null. 然后取消暂停。由于空指针错误,Unity 本身现在会解锁,我可以将其退出播放模式并保存我的工作。
(Unity 2017.4.1f1 个人版、Windows 10 家庭版 x64、Monodevelop 5.9.6)
请注意,我从阅读@Kinxil 的答案中得到了这个想法,但我不得不采取稍微不同的方法,因为没有“阻塞值”。我有一个for (;;)以前在协程内的循环,我将它更改为在 a 内,FixedUpdate()而不删除循环。:\ 所以导致异常是我能想到的唯一选择。
解决方案
对于 Visual Studio
(我还没有测试过其他 IDE)
可选地,如果循环位于某些 Update() 事件内,该事件将再次重新进入循环:
UnityEngine.Debug.Break()即时窗口,然后按Enter内最后恢复执行(播放按钮)并返回到 Unity 编辑器。Unity 现在应该处于“暂停”状态,您可以在其中检查出了什么问题或“停止”播放模式。
小智 6
对我来说,这奏效了。
如何摆脱无限循环