diff --git a/crates/bevy_sprite/src/texture_slice/computed_slices.rs b/crates/bevy_sprite/src/texture_slice/computed_slices.rs index 1f08e9a817..c15fd264de 100644 --- a/crates/bevy_sprite/src/texture_slice/computed_slices.rs +++ b/crates/bevy_sprite/src/texture_slice/computed_slices.rs @@ -53,10 +53,21 @@ impl ComputedTextureSlices { flip_x, flip_y, image_handle_id: handle.id(), - anchor: sprite.anchor.as_vec(), + anchor: Self::redepend_anchor_from_sprite_to_slice(sprite, slice), } }) } + + fn redepend_anchor_from_sprite_to_slice(sprite: &Sprite, slice: &TextureSlice) -> Vec2 { + let sprite_size = sprite + .custom_size + .unwrap_or(sprite.rect.unwrap_or_default().size()); + if sprite_size == Vec2::ZERO { + sprite.anchor.as_vec() + } else { + sprite.anchor.as_vec() * sprite_size / slice.draw_size + } + } } /// Generates sprite slices for a `sprite` given a `scale_mode`. The slices