diff --git a/Source/Editor/Gizmo/ViewportRubberBandSelector.cs b/Source/Editor/Gizmo/ViewportRubberBandSelector.cs
index b9f458705..36b1884ad 100644
--- a/Source/Editor/Gizmo/ViewportRubberBandSelector.cs
+++ b/Source/Editor/Gizmo/ViewportRubberBandSelector.cs
@@ -162,8 +162,8 @@ public sealed class ViewportRubberBandSelector
projection.Init(_owner.Viewport);
foreach (var node in nodes)
{
- // Check for custom can select code
- if (!node.CanSelectActorNodeWithSelector())
+ // Skip actors that cannot be selected
+ if (!node.CanSelectInViewport)
continue;
var a = node.Actor;
diff --git a/Source/Editor/SceneGraph/ActorNode.cs b/Source/Editor/SceneGraph/ActorNode.cs
index 0740fb84f..7d279f86b 100644
--- a/Source/Editor/SceneGraph/ActorNode.cs
+++ b/Source/Editor/SceneGraph/ActorNode.cs
@@ -192,7 +192,7 @@ namespace FlaxEditor.SceneGraph
GetAllChildActorNodes(nodes);
return nodes.ToArray();
}
-
+
///
/// Get all nested actor nodes under this actor node.
///
@@ -213,12 +213,18 @@ namespace FlaxEditor.SceneGraph
}
///
- /// Whether an actor node can be selected with a selector.
+ /// Whether an actor node can be selected with a selector inside editor viewport.
///
- /// True if the actor node can be selected
- public virtual bool CanSelectActorNodeWithSelector()
+ public virtual bool CanSelectInViewport
{
- return Actor && Actor.HideFlags is not (HideFlags.DontSelect or HideFlags.FullyHidden) && Actor is not EmptyActor && IsActive;
+ get
+ {
+ var actor = Actor;
+ return actor &&
+ actor.IsActiveInHierarchy &&
+ (actor.HideFlags & HideFlags.DontSelect) == HideFlags.None &&
+ actor.GetType() != typeof(EmptyActor);
+ }
}
///
diff --git a/Source/Editor/SceneGraph/Actors/SceneNode.cs b/Source/Editor/SceneGraph/Actors/SceneNode.cs
index 9e380ff91..88ae8b892 100644
--- a/Source/Editor/SceneGraph/Actors/SceneNode.cs
+++ b/Source/Editor/SceneGraph/Actors/SceneNode.cs
@@ -33,12 +33,6 @@ namespace FlaxEditor.SceneGraph.Actors
}
}
- ///
- public override bool CanSelectActorNodeWithSelector()
- {
- return false;
- }
-
///
/// Gets the scene.
///
@@ -53,6 +47,9 @@ namespace FlaxEditor.SceneGraph.Actors
{
}
+ ///
+ public override bool CanSelectInViewport => false;
+
///
public override bool CanCreatePrefab => false;
diff --git a/Source/Editor/SceneGraph/Actors/UICanvasNode.cs b/Source/Editor/SceneGraph/Actors/UICanvasNode.cs
index ef7663e5d..af1406e5d 100644
--- a/Source/Editor/SceneGraph/Actors/UICanvasNode.cs
+++ b/Source/Editor/SceneGraph/Actors/UICanvasNode.cs
@@ -80,9 +80,6 @@ namespace FlaxEditor.SceneGraph.Actors
}
///
- public override bool CanSelectActorNodeWithSelector()
- {
- return Actor is UICanvas uiCanvas && uiCanvas.Is3D && base.CanSelectActorNodeWithSelector();
- }
+ public override bool CanSelectInViewport => base.CanSelectInViewport && Actor is UICanvas uiCanvas && uiCanvas.Is3D;
}
}
diff --git a/Source/Editor/SceneGraph/Actors/UIControlNode.cs b/Source/Editor/SceneGraph/Actors/UIControlNode.cs
index 57a956665..677571d92 100644
--- a/Source/Editor/SceneGraph/Actors/UIControlNode.cs
+++ b/Source/Editor/SceneGraph/Actors/UIControlNode.cs
@@ -42,29 +42,31 @@ namespace FlaxEditor.SceneGraph.Actors
}
///
- public override bool CanSelectActorNodeWithSelector()
+ public override bool CanSelectInViewport
{
- // Check if control and skip if canvas is 2D
- if (Actor is not UIControl uiControl)
- return false;
- UICanvas canvas = null;
- var controlParent = uiControl.Parent;
- while (controlParent != null && controlParent is not Scene)
+ get
{
- if (controlParent is UICanvas uiCanvas)
- {
- canvas = uiCanvas;
- break;
- }
- controlParent = controlParent.Parent;
- }
-
- if (canvas != null)
- {
- if (canvas.Is2D)
+ // Check if control and skip if canvas is 2D
+ if (Actor is not UIControl uiControl)
return false;
+ UICanvas canvas = null;
+ var controlParent = uiControl.Parent;
+ while (controlParent != null && controlParent is not Scene)
+ {
+ if (controlParent is UICanvas uiCanvas)
+ {
+ canvas = uiCanvas;
+ break;
+ }
+ controlParent = controlParent.Parent;
+ }
+ if (canvas != null)
+ {
+ if (canvas.Is2D)
+ return false;
+ }
+ return base.CanSelectInViewport;
}
- return base.CanSelectActorNodeWithSelector();
}
}
}