微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。