[通用] 编辑器自动保存
防止各种意外崩溃导致未保存的内容丢失,可以按照需求删减或修改 。
使用方法:在Assets内创建一个C#脚本,删除脚本内预制的代码,将以下代码黏贴到脚本内,保存后即可生效。
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
[InitializeOnLoad]
public class AutoSaveScenes
{
static AutoSaveScenes()
{
//当层级视图中对象层级发生变化后触发事件
EditorApplication.hierarchyChanged += EditorApplication_hierarchyChanged;
//当切换其他程序或切换回编辑器时触发事件
EditorApplication.focusChanged += EditorApplication_focusChanged;
//当编辑器播放触发事件
EditorApplication.playModeStateChanged += DoAutoSaveScenesWhenPlay;
}
static int count = 0;
/// <summary>
/// 当层级视图中对象层级发生10次变化后触发事件
/// </summary>
private static void EditorApplication_hierarchyChanged()
{
count++;
if (count > 10)
{
count = 0;
EditorSceneManager.SaveOpenScenes();
AssetDatabase.SaveAssets();
}
}
/// <summary>
/// 获取编辑器焦点状态
/// </summary>
/// <param name="obj"> false为切出编辑器,true为切回编辑器 </param>
private static void EditorApplication_focusChanged(bool obj)
{
if (!obj)
{
EditorSceneManager.SaveOpenScenes();
AssetDatabase.SaveAssets();
}
}
/// <summary>
/// 播放前保存
/// </summary>
/// <param name="state">播放状态</param>
private static void DoAutoSaveScenesWhenPlay(PlayModeStateChange state)
{
if (state == PlayModeStateChange.ExitingEditMode)
{
EditorSceneManager.SaveOpenScenes();
AssetDatabase.SaveAssets();
}
}
}
#endif