From d7b971f28d7124c3e105f60eae766c8f83b4d3d0 Mon Sep 17 00:00:00 2001 From: MoeThun <42713208+moe-moe-pupil@users.noreply.github.com> Date: Sun, 16 Nov 2025 06:46:38 +0800 Subject: [PATCH 1/2] fix: return current hit for DragDrop event previously, it returns the hit of DragEnter event --- crates/bevy_picking/src/events.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 1e3ec18f38851..905d47c413426 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -655,7 +655,9 @@ pub fn pointer_events( // Then emit the drop events. for (drag_target, drag) in state.dragging.drain() { // Emit DragDrop - for (dragged_over, hit) in state.dragging_over.iter() { + for (dragged_over, _) in state.dragging_over.iter() { + let hover_hit_map = hover_map.get(&pointer_id).unwrap(); + let hit = hover_hit_map.get(dragged_over).unwrap(); let drag_drop_event = Pointer::new( pointer_id, location.clone(), From b6786bb180b3be3363da14eb2a55cac1dc526589 Mon Sep 17 00:00:00 2001 From: MoeThun <42713208+moe-moe-pupil@users.noreply.github.com> Date: Wed, 19 Nov 2025 23:07:47 +0800 Subject: [PATCH 2/2] fix: the hit in state.dragging_over isn't always the latest one --- crates/bevy_picking/src/events.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 905d47c413426..6e25bd235c891 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -655,9 +655,7 @@ pub fn pointer_events( // Then emit the drop events. for (drag_target, drag) in state.dragging.drain() { // Emit DragDrop - for (dragged_over, _) in state.dragging_over.iter() { - let hover_hit_map = hover_map.get(&pointer_id).unwrap(); - let hit = hover_hit_map.get(dragged_over).unwrap(); + for (dragged_over, hit) in state.dragging_over.iter() { let drag_drop_event = Pointer::new( pointer_id, location.clone(), @@ -768,6 +766,7 @@ pub fn pointer_events( .flat_map(|h| h.iter().map(|(entity, data)| (*entity, data.to_owned()))) .filter(|(hovered_entity, _)| *hovered_entity != *drag_target) { + *state.dragging_over.get_mut(&hovered_entity).unwrap() = hit.clone(); let drag_over_event = Pointer::new( pointer_id, location.clone(),