Unity自定义编辑器退出Unity时保存数据

问题描述

我创建了一个简单的自定义编辑器,显示了我在Unity上花费了多少时间。按下按钮时,它将开始时间记录在一个可编写脚本的对象中(该对象很脏)。再次按下该按钮时,它将记录结束时间。如果在按下按钮之前关闭了窗口,则使用OnDestroy()方法完成录制。它有效(我也使用“ ExecuteInEditMode”)。 这是问题所在:如果我不按下按钮就关闭Unity,则OnDestroy()方法这次不起作用。有什么办法可以解决这个问题?

解决方法

您可以向EditorApplication.quitting

添加回调

当编辑器应用程序退出时,Unity引发此事件。

向该事件添加事件处理程序,以接收有关应用程序退出的通知。

请注意,如果强制退出编辑器或发生崩溃,则不会触发。无法退出流程时引发此事件。

请注意,您可以完全自动化地完成操作,而无需按钮或ScriptableObject:

using UnityEngine;
using UnityEditor;
using System.Diagnostics;

public static class LogEditorTime
{
    private static bool isLogging;
    private static readonly StopWatch sw = new StopWatch ();

    static void OnQuit()
    {
        sw.Stop();
        var elapsedTime = sw.Elapsed;

        Debug.Log($"Quitting the Editor after {elapsedTime.Hours}h {elapsedTime.Minutes}m {elapsedTime.Seconds}.{elapsedTime.Milliseconds / 10}s");
    }

    [InitializeOnLoadMethod]
    static void OnLoad()
    {
        if(isLogging) return;

        sw.Restart();

        EditorApplication.quitting -= OnQuit;
        EditorApplication.quitting += OnQuit;

        isLogging = true;
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...