75 lines
2.1 KiB
C#
75 lines
2.1 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// Unity 编辑器每隔 10 分钟自动保存一次打开的场景和资源。
|
|
/// 菜单:Tools / Auto Save
|
|
/// </summary>
|
|
[InitializeOnLoad]
|
|
public static class AutoSave
|
|
{
|
|
private const string PrefEnabled = "UITools.AutoSave.Enabled";
|
|
private const double IntervalSeconds = 10 * 60; // 10 分钟
|
|
|
|
private static double _nextSaveTime;
|
|
private static bool Enabled
|
|
{
|
|
get => EditorPrefs.GetBool(PrefEnabled, true);
|
|
set => EditorPrefs.SetBool(PrefEnabled, value);
|
|
}
|
|
|
|
static AutoSave()
|
|
{
|
|
_nextSaveTime = EditorApplication.timeSinceStartup + IntervalSeconds;
|
|
EditorApplication.update += OnUpdate;
|
|
}
|
|
|
|
private static void OnUpdate()
|
|
{
|
|
if (!Enabled) return;
|
|
if (EditorApplication.isPlayingOrWillChangePlaymode) return;
|
|
if (EditorApplication.timeSinceStartup < _nextSaveTime) return;
|
|
|
|
_nextSaveTime = EditorApplication.timeSinceStartup + IntervalSeconds;
|
|
DoSave();
|
|
}
|
|
|
|
private static void DoSave()
|
|
{
|
|
EditorSceneManager.SaveOpenScenes();
|
|
AssetDatabase.SaveAssets();
|
|
Debug.Log($"[AutoSave] 已自动保存 — {System.DateTime.Now:HH:mm:ss}");
|
|
}
|
|
|
|
[MenuItem("Tools/Auto Save/立即保存")]
|
|
private static void SaveNow()
|
|
{
|
|
DoSave();
|
|
_nextSaveTime = EditorApplication.timeSinceStartup + IntervalSeconds;
|
|
}
|
|
|
|
[MenuItem("Tools/Auto Save/启用", true)]
|
|
private static bool ValidateEnable() => !Enabled;
|
|
|
|
[MenuItem("Tools/Auto Save/启用")]
|
|
private static void Enable()
|
|
{
|
|
Enabled = true;
|
|
_nextSaveTime = EditorApplication.timeSinceStartup + IntervalSeconds;
|
|
Debug.Log("[AutoSave] 已启用(每 10 分钟)");
|
|
}
|
|
|
|
[MenuItem("Tools/Auto Save/禁用", true)]
|
|
private static bool ValidateDisable() => Enabled;
|
|
|
|
[MenuItem("Tools/Auto Save/禁用")]
|
|
private static void Disable()
|
|
{
|
|
Enabled = false;
|
|
Debug.Log("[AutoSave] 已禁用");
|
|
}
|
|
}
|
|
#endif
|