diff --git a/Source/Editor/Gizmo/TransformGizmo.cs b/Source/Editor/Gizmo/TransformGizmo.cs index 601467313..3bd0ded44 100644 --- a/Source/Editor/Gizmo/TransformGizmo.cs +++ b/Source/Editor/Gizmo/TransformGizmo.cs @@ -100,7 +100,7 @@ namespace FlaxEditor.Gizmo while (true) { var view = new Ray(Owner.ViewPosition, Owner.ViewDirection); - var rayCastFlags = SceneGraphNode.RayCastData.FlagTypes.SkipEditorPrimitives; + var rayCastFlags = SceneGraphNode.RayCastData.FlagTypes.SkipEditorPrimitives | SceneGraphNode.RayCastData.FlagTypes.SkipTriggers; var hit = Owner.SceneGraphRoot.RayCast(ref ray, ref view, out var distance, out _, rayCastFlags); if (hit != null) { @@ -130,10 +130,12 @@ namespace FlaxEditor.Gizmo var newPosition = ray.GetPoint(distance) + new Vector3(0, bottomToCenter, 0); // Snap - StartTransforming(); var translationDelta = newPosition - Position; var rotationDelta = Quaternion.Identity; var scaleDelta = Vector3.Zero; + if (translationDelta.IsZero) + break; + StartTransforming(); OnApplyTransformation(ref translationDelta, ref rotationDelta, ref scaleDelta); EndTransforming(); } diff --git a/Source/Editor/SceneGraph/Actors/ColliderNode.cs b/Source/Editor/SceneGraph/Actors/ColliderNode.cs index 2cde4809f..9ce047d67 100644 --- a/Source/Editor/SceneGraph/Actors/ColliderNode.cs +++ b/Source/Editor/SceneGraph/Actors/ColliderNode.cs @@ -31,7 +31,8 @@ namespace FlaxEditor.SceneGraph public override bool RayCastSelf(ref RayCastData ray, out Real distance, out Vector3 normal) { // Check if skip raycasts - if ((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders) + if (((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders) || + (((ray.Flags & RayCastData.FlagTypes.SkipTriggers) == RayCastData.FlagTypes.SkipTriggers) && ((Collider)Actor).IsTrigger)) { distance = 0; normal = Vector3.Up; diff --git a/Source/Editor/SceneGraph/SceneGraphNode.cs b/Source/Editor/SceneGraph/SceneGraphNode.cs index b48d84db2..8588f1a1e 100644 --- a/Source/Editor/SceneGraph/SceneGraphNode.cs +++ b/Source/Editor/SceneGraph/SceneGraphNode.cs @@ -194,6 +194,11 @@ namespace FlaxEditor.SceneGraph /// The skip editor primitives. Use it to ignore editor icons and primitives intersections detection. /// SkipEditorPrimitives = 2, + + /// + /// The skip trigger colliders flag. Use it to ignore physics trigger colliders intersections detection. + /// + SkipTriggers = 4, } /// diff --git a/Source/Editor/Tools/Foliage/EditFoliageGizmo.cs b/Source/Editor/Tools/Foliage/EditFoliageGizmo.cs index 687854b89..1951f6520 100644 --- a/Source/Editor/Tools/Foliage/EditFoliageGizmo.cs +++ b/Source/Editor/Tools/Foliage/EditFoliageGizmo.cs @@ -250,10 +250,12 @@ namespace FlaxEditor.Tools.Foliage if (Physics.RayCast(Position, Vector3.Down, out var hit, float.MaxValue, uint.MaxValue, false)) { // Snap - StartTransforming(); var translationDelta = hit.Point - Position; var rotationDelta = Quaternion.Identity; var scaleDelta = Vector3.Zero; + if (translationDelta.IsZero) + return; + StartTransforming(); OnApplyTransformation(ref translationDelta, ref rotationDelta, ref scaleDelta); EndTransforming(); }