private static double totalTimer = 30;

    private static bool isAutoSaveScene = false;

    [MenuItem("Tools/OpenOrCloseAutoSaveScene")]
    public static void OpenOrCloseAutoSaveScene()
    {
        isAutoSaveScene = !isAutoSaveScene;
        if(isAutoSaveScene)
            UpdateTotalTimer();

        UnityEngine.Debug.Log("save scene : " + isAutoSaveScene.ToString());
    }

    [InitializeOnLoadMethod]//标记unity编辑器加载时调用该方法
    static void OnCheck() {
        System.Action OnEvent = delegate {
            Event e = Event.current;//一些操作产生的事件,比如鼠标键盘等等
            if (e != null && e.type == EventType.keyDown && e.keyCode == KeyCode.Delete) {
                if (EditorApplication.isPlaying) return;
                if (Selection.activeGameObject != null) {
                    if (EditorUtility.DisplayDialog("警告", "你将要删除的物体" + Selection.activeGameObject.name, "确定", "取消")) {
                        Undo.DestroyObjectImmediate(Selection.activeGameObject);//可撤销删除
                    }
                    e.Use();//删除事件,是其他的代码检测不到这个事件
                }

            }
        };
        //在hierarchy的OnGUI方法中添加事件监听
        EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect) {
            OnEvent();
        };

        EditorApplication.playmodeStateChanged = UpdateTotalTimer;

        totalTimer += EditorApplication.timeSinceStartup;
        //在unity编辑器的Update方法中检测时间
        EditorApplication.update = delegate {
            if (isAutoSaveScene && !EditorApplication.isPlaying) {
                if(EditorApplication.timeSinceStartup >= totalTimer) {
                    UnityEngine.Debug.Log("save scene.");
                    //保存打开的场景
                    UnityEditor.SceneManagement.EditorSceneManager.SaveOpenScenes();
                    UpdateTotalTimer();
                }
            }
        };
    }

    private static void UpdateTotalTimer() {
        totalTimer = EditorApplication.timeSinceStartup + 30;
    }

在unity开发中每隔30秒自动保存场景。

删除二次确认:可以在删除的时候检查某些删除是否会造成其他影响,根据自己的判断弹出二次确认即可。

 

最近发现一个新的写法,对一个类添加[ExecuteInEditMode]标识,可以让该类的方法在编辑器模式下也可以执行,例如想使用unity脚本函数Update,可以这么写,这样就比较简单了

using UnityEngine;

[ExecuteInEditMode]
public class TTTTT : MonoBehaviour
{
    public void OnEnable()
    {

    }

    private void OnDisable()
    {

    }

    private void Update()
    {

    }
}

 

更多推荐