void UpdateDragBox() { int ID = GUIUtility.GetControlID(hash, FocusType.Passive); switch (Event.current.GetTypeForControl(ID)) { case EventType.Layout: HandleUtility.AddDefaultControl(ID); break; case EventType.MouseDown: if (Event.current.button == 0 && HandleUtility.nearestControl == ID) { GridEditorUtility.MousePos0 = Camera.current.ScreenToViewportPoint(Event.current.mousePosition); GridEditorUtility.MousePos0.y = 1f - GridEditorUtility.MousePos0.y; GridEditorUtility.IsMouseDown = true; GUIUtility.hotControl = ID; Event.current.Use(); EditorGUIUtility.SetWantsMouseJumping(1); } break; case EventType.MouseDrag: if (Event.current.button == 0) { GUI.changed = true; Event.current.Use(); } break; case EventType.MouseUp: if (Event.current.button == 0) { GridEditorUtility.MousePosF = Camera.current.ScreenToViewportPoint(Event.current.mousePosition); GridEditorUtility.MousePosF.y = 1f - GridEditorUtility.MousePosF.y; GridEditorUtility.DragSelecting(target); GridEditorUtility.IsMouseDown = false; if (GUIUtility.hotControl == ID) { GUIUtility.hotControl = 0; Event.current.Use(); EditorGUIUtility.SetWantsMouseJumping(0); } } break; case EventType.Repaint: if (GridEditorUtility.IsMouseDown) { DrawDragBox(); } break; } }