【问题标题】:Detect when Editor exit/closes检测编辑器何时退出/关闭
【发布时间】:2017-06-21 07:37:23
【问题描述】:

我正在制作一个编辑器插件,它与使用 C++ 制作的本机插件进行通信。当编辑器即将关闭时,我需要通知本机插件。我在 Unity 的 doc 上花了几个小时寻找可用于检测编辑器何时关闭的事件或回调函数,但我找不到。

通常,OnApplicationQuitOnApplicationPauseOnApplicationFocus 在独立构建中用于类似的操作,但这是用于编辑器的,因此无法使用

有人知道有什么功能或事件可以做到这一点吗?如果这没有内置的解决方案,是否有黑客或其他方法可以做到这一点?

【问题讨论】:

  • editor on destroy 也许?
  • 不。当您有一个插件窗口并想要检测该窗口何时关闭时,您可以使用它。我想检测编辑器本身何时关闭。

标签: c# unity3d


【解决方案1】:

没有本地方法可以自行检测编辑器的关闭。

但是,您可以连接到进程本身并等待退出事件,如 answer 中所述。

但如果可能的话,您将希望在 c++ 端本身执行此操作。

C++, How to determine if a Windows Process is running?

【讨论】:

  • 我不是在寻找检测关机的本地方法。我正在寻找在 C# 中执行此操作的方法,然后我可以调用本机函数来让它知道 Unity 正在关闭。问题是在 C# 中检测关闭。
  • 另外,检查过程在这里也无济于事,因为我在本机端和 C# 端都有指针,用于传递和接收 Object 实例。我必须使用 C# 端的当前指针,然后将其传递给 C++ 端以禁用硬件。基本上编辑器的实例必须与插件匹配。所以进程不能这样做,因为没有办法检索指针,但感谢您的回答。
  • 那样的话恐怕根本不可能。
  • 一个可能的、古怪的解决办法是让一个 0,0 大小的编辑器窗口始终在屏幕外打开。其中,在关闭时会做你想做的事情。在 alt+f4 关机时,您可以在 1-2 秒内清理所有必须清理的内容。
  • 听起来不错。甚至不知道这会起作用,但唯一不好的一面是捷径+窗口。打开未使用的窗口可能很烦人。如果没有其他解决方案,将使用此方法。
【解决方案2】:

现在Unity 2018.2中有EditorApplication.quitting

UnityEditor.EditorApplication.quitting += OnQuitting;

private void OnQuitting()
{
    // do what you want to do when editor quit
}

【讨论】:

  • 这是一个事件。请扩展答案以显示以使用它。我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多