GUIUtility.hotControl
IMGUI中每个可点击(交互)的控件都会有一个controlID, 一般在mouseDown的时候设置, mouseUp的时候清除。
#if UNITY_EDITOR using UnityEditor; using UnityEngine; public class TestHotControlIdWindow : EditorWindow { [MenuItem("MyTools/TestHotControlIdWindow")] public static void ShowWindow() { EditorWindow.GetWindow<TestHotControlIdWindow>(false, "TestHotControlIdWindow", true).Show(); } private Vector3 m_Scale = Vector3.one; private Quaternion m_Rot = Quaternion.identity; private float m_Radius = 2.0f; private void OnEnable() { SceneView.onSceneGUIDelegate -= OnMySceneGUI; SceneView.onSceneGUIDelegate += OnMySceneGUI; } private void OnDisable() { SceneView.onSceneGUIDelegate -= OnMySceneGUI; } private void OnMySceneGUI(SceneView sceneView) { var curEvt = Event.current; var hotControl1 = GUIUtility.hotControl; var evtType1 = curEvt.type; //控制柄控件 Handles.color = Color.blue; var pos = new Vector3(-5, 0, 0); float handleSize = HandleUtility.GetHandleSize(pos); m_Scale = Handles.ScaleHandle(m_Scale, pos, Quaternion.identity, handleSize); //缩放控制柄 pos.x -= 6; m_Rot = Handles.RotationHandle(m_Rot, pos); //旋转控制柄 pos.x -= 6; m_Radius = Handles.RadiusHandle(Quaternion.identity, pos, m_Radius); //半径控制柄 //gui控件 GUILayout.BeginArea(new Rect(40, 20, 200, 300), "test"); GUILayout.Button("Button"); GUILayout.Label("Label Text"); GUILayout.EndArea(); if (evtType1 == EventType.MouseMove) { curEvt.Use(); //调用后, curEvtType会变为Used } var hotControl2 = GUIUtility.hotControl; var evtType2 = curEvt.type; if (evtType1 == EventType.Repaint || evtType1 == EventType.Layout) { //no log } else { if (evtType1 == EventType.MouseDown) { Debug.Log($"hotControl 111:{hotControl1}, {hotControl2}; evtType:{evtType1}, {evtType2}"); } else if (0 != hotControl1) { Debug.Log($"hotControl 222:{hotControl1}, {hotControl2}; evtType:{evtType1}, {evtType2}"); } } } } #endif
在Scene视图中点击空白位置, hotControl也是有值的, 是Scene视图本身就属于一个控件么?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!