Skip to content

Commit 26473b3

Browse files
author
Sander van Rossen
committed
Fixed issue where Unity adds object to selection on click + modifier key
1 parent 03adff5 commit 26473b3

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

RealtimeCSG/Assets/Plugins/RealtimeCSG/Editor/Scripts/Control/Managers/RectangleSelectionManager.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ static void InitReflectedData()
112112
static bool mouseDragged = false;
113113
static Vector2 clickMousePosition = MathConstants.zeroVector2;
114114

115+
116+
static List<UnityEngine.Object> sFoundObjects = new List<UnityEngine.Object>();
117+
115118
// Update rectangle selection using reflection
116119
// This is hacky & dangerous
117120
// LOOK AWAY NOW!
@@ -307,18 +310,32 @@ internal static void Update(SceneView sceneView)
307310
case EventType.MouseDown:
308311
{
309312
rectClickDown = (Event.current.button == 0 && hotControl == s_RectSelectionID_instance);
313+
var selectedObjects = Selection.objects;
314+
sFoundObjects.Clear();
315+
foreach (var obj in selectedObjects)
316+
{
317+
var component = obj as Component;
318+
var gameObject = obj as GameObject;
319+
var transform = obj as Transform;
320+
if (!(component && component.GetComponent<GeneratedMeshes>()) &&
321+
!(gameObject && gameObject.GetComponent<GeneratedMeshes>()) &&
322+
!(transform && transform.GetComponent<Transform>()))
323+
sFoundObjects.Add(obj);
324+
}
310325
clickMousePosition = Event.current.mousePosition;
311326
mouseDragged = false;
312327
break;
313328
}
314329
case EventType.MouseUp:
315330
{
316331
rectClickDown = false;
332+
sFoundObjects.Clear();
317333
break;
318334
}
319335
case EventType.MouseMove:
320336
{
321337
rectClickDown = false;
338+
sFoundObjects.Clear();
322339
break;
323340
}
324341
case EventType.Used:
@@ -340,20 +357,9 @@ internal static void Update(SceneView sceneView)
340357
if (Selection.gameObjects != null)
341358
{
342359
var selectedObjects = Selection.objects;
343-
var foundObjects = new List<UnityEngine.Object>();
344-
foreach (var obj in selectedObjects)
345-
{
346-
var component = obj as Component;
347-
var gameObject = obj as GameObject;
348-
var transform = obj as Transform;
349-
if (!(component && component.GetComponent<GeneratedMeshes>()) &&
350-
!(gameObject && gameObject.GetComponent<GeneratedMeshes>()) &&
351-
!(transform && transform.GetComponent<Transform>()))
352-
foundObjects.Add(obj);
353-
}
354-
if (foundObjects.Count != selectedObjects.Length)
360+
if (sFoundObjects.Count != selectedObjects.Length)
355361
{
356-
Selection.objects = foundObjects.ToArray();
362+
Selection.objects = sFoundObjects.ToArray();
357363
}
358364
}
359365

@@ -363,6 +369,7 @@ internal static void Update(SceneView sceneView)
363369

364370
}
365371
rectClickDown = false;
372+
sFoundObjects.Clear();
366373
break;
367374
}
368375

0 commit comments

Comments
 (0)