拓展編輯器(十五)_禁用選中物件
阿新 • • 發佈:2018-11-04
在Scene檢視和Hierarchy檢視中,都可以選擇遊戲物件。Scene檢視中因為東西很多,而且很可能大量重疊,很容易選錯物件。在開發編輯器的時候,當操作某個物件時,如果不希望Scene檢視中誤操作別的物件,我們可以禁用選中物件的功能,程式碼如下:
using UnityEngine; using UnityEditor; public class 禁用選中物件 { [InitializeOnLoadMethod] static void InitializeOnLoadMethod() { SceneView.onSceneGUIDelegate= delegate (SceneView sceneView) { Event e = Event.current; if (e != null) { int controlID = GUIUtility.GetControlID(FocusType.Passive); if (e.type == EventType.Layout) { HandleUtility.AddDefaultControl(controlID); } } }; } }
在上述程式碼中,FocusType.Passive表示禁止接受控制焦點,獲取它的controlID後,即可禁止將點選事件穿透下去。此時我們想要選中物體只能通過Hierarchy面板。
此外,還有一個辦法可以禁止選中功能,即以層為單位設定某個層無法選中。如圖所示,右邊有個"小鎖頭"的就無法選中了
我們直接在Scene檢視中很容易選擇到子節點,此時可以給它繫結一個[SelectionBase]標記,這樣該指令碼下的所有節點都會定位到繫結這個標記的物件上,程式碼如下:
[SelectionBase] public class RootScript : MonoBehaviour { }
此時在Scene中選擇物件,將全選繫結該指令碼的所有節點。若想單獨選擇一個子節點,需要在Hierarchy面板中選擇。
ps: GUIUtility.GetControlID方法可以維空間獲取唯一ID
HandleUtility.AddDefaultControl用於新增預設控制元件