Unity Editor禁止通过键盘删除GameObject

Unity Editor禁止通过键盘删除GameObject

如果希望某类GameObject不可以通过键盘的Delete键进行删除,可以为该类型实现一个自定义的编辑器扩展类,并使该扩展类继承下面的 InterceptKeyboardDeleteEditor 类。

InterceptKeyboardDeleteEditor 类的作用原理是,在脚本被激活时每帧检测Unity Editor的 Event ,如果当前的 Event 对应了Delete键事件,则将其标记为 Used ,这样Unity Editor便不再处理该 Event

InterceptKeyboardDeleteEditor

/// <summary>
/// 编辑器扩展基类。
/// 此基类禁止使用键盘删除GameObject,
/// 但是不能禁止在Hierarchy中通过右键菜单删除GameObject。
/// </summary>
public abstract class InterceptKeyboardDeleteEditor : Editor
{
    protected virtual void OnEnable()
    {
        EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
    }

    protected virtual void OnDisable()
    {
        EditorApplication.hierarchyWindowItemOnGUI -= OnHierarchyGUI;
    }

    // 禁止在Scene中通过键盘删除
    protected virtual void OnSceneGUI()
    {
        InterceptKeyboardDelete();
    }

    // 禁止在Hierarchy中通过键盘删除
    protected virtual void OnHierarchyGUI(int instanceID, Rect selectionRect)
    {
        InterceptKeyboardDelete();
    }


    // 拦截键盘删除事件
    private void InterceptKeyboardDelete()
    {
        var e = Event.current;
        if (e.keyCode == KeyCode.Delete)
        {
            //e.Use(); // warning
            e.type = EventType.Used;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章