1. 程式人生 > >拓展編輯器(十五)_禁用選中物件

拓展編輯器(十五)_禁用選中物件

  在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用於新增預設控制元件