1

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

4

1 回答 1

0

你可以添加一个回调到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;
    }
}
于 2020-11-03T19:02:54.537 回答