unity3d - 如何从另一个线程退出播放模式
问题描述
是否有可能(甚至以一种骇人听闻的方式)EditorApplication
从另一个线程调用函数?更具体地说,我想从另一个线程(不是主 Unity 线程)退出播放模式。
我的用例是,我正在尝试编写一个小片段,在编辑器中检测无限循环,并在检测到时将其中断。到目前为止,我发现的“最好的”是终止进程,但这并没有真正的帮助。
解决方案
你不能。Unity 线程与普通程序不同,因为它是基于帧的。您可以要求 Unity 主线程运行方法,方法是设置在每一帧检查的 bool 或设置<Action>
Or <Task>
Queue,就像上面评论中 remy_rm 建议的链接中解释的那样。
但是这些 hack 不会在 unity 主线程上运行方法,它们只是优雅地要求 Unity 主线程本身运行它。这种差异虽然在正常情况下很微妙,但对您的问题至关重要。当主线程陷入无限循环时,您想调用主线程上的方法来杀死它,但事实并非如此,Unity 的主线程永远不会到达Update()
它应该杀死自己的地步。您基本上是给一个永远不会回家的人寄信,如果他被困在某个地方无法回家,他将永远不会阅读。
在这些情况下,我想到的最好方法是附加一个调试器并停止其中的线程。
推荐阅读
- json - Extracting a list of dicts for a Pandas column
- java - 如果测试用例在 testNG 中失败,如何运行类
- unity3d - Stats 和 Frame Debugger 计数中的不同批次数(统计中为 222,调试器中为 55)
- java - 以正则表达式拆分文本文件并创建数组
- tensorflow - TFlite 解释器在为量化模型分配张量时引发 RuntimeError。涉及 scale_diff 和 output_scale 的断言失败
- android - Android 上的 Android 蓝牙交叉传输密钥派生支持
- ios - IOS 以低帧率运行我的 Unity 项目
- powershell - Connect-AzureAD 不适用于 Powershell 核心
- r - 如何将一个数据框列中的 N 个值交换为 N 的任何值和任何 n(行)?
- php - 如何使用 Laravel 迁移更新值?