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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章