拓展编辑器(十五)_禁用选中对象

  在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用于添加默认控件

猜你喜欢

转载自www.cnblogs.com/llllllvty/p/9906586.html