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