从用户操作中检测游戏对象移除

Detect gameobject removal from user action

我正在开发一个自动生成和发布脚本化对象的系统,该对象代表具有给定组件附加的游戏对象的唯一性。

生成过程似乎工作得很好,但是当我想要释放脚本化对象时遇到了问题。 给定的脚本被标记为 "ExecuteInEditMode" 并且正在实施 OnDestroy 方法来通知经理应该删除他的可编写脚本的对象。 问题是据我所知,OnDestroy 在 4 种情况下被调用:

我已经能够通过这个首先避免 2 :

if (Application.isPlaying == false && Math.Abs(Time.timeSinceLevelLoad) > 0.00001f)

但是我没有找到 "On editor shutdown" 的任何好的解决方案我已经看到 EditorApplication.quitting 可以用于这种情况,但是文档警告说当 unity 崩溃或被迫退出,我不想在编辑器崩溃时丢失所有可编写脚本的对象。

如果有人可以帮助我,我正在寻找一个可靠的解决方案来避免这个问题。

谢谢,祝你有愉快的一天

只处理应用程序退出事件。

this event is not called when unity crash or is forced to quit, and I don't want to lose all my scriptable object if the editor crash.

当 unity 崩溃时,您的程序也会崩溃,因此它无法以任何方式运行。只需确保在正常操作程序(即正常关机)下保存您的修改即可。

在 Unity3D 中,如果您编辑场景但未保存,如果编辑器崩溃,您将丢失所有更改。您在这里构建的内容也会发生同样的情况。为了减轻这种风险(因为预防即使不是不可能也是相当困难的),您可以选择每分钟保存一次,始终将每次更改保存到一个临时位置,或者保存例如每次播放。

例如,我在我的项目中添加了一个脚本,每当我按下播放键时自动保存场景,所以在编辑场景时我不时按下播放键进行测试,它都会自动保存。