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