mouse_grab/
mouse_grab.rs

1//! Demonstrates how to grab and hide the mouse cursor.
2
3use bevy::{
4    prelude::*,
5    window::{CursorGrabMode, CursorOptions},
6};
7
8fn main() {
9    App::new()
10        .add_plugins(DefaultPlugins)
11        .add_systems(Update, grab_mouse)
12        .run();
13}
14
15// This system grabs the mouse when the left mouse button is pressed
16// and releases it when the escape key is pressed
17fn grab_mouse(
18    mut cursor_options: Single<&mut CursorOptions>,
19    mouse: Res<ButtonInput<MouseButton>>,
20    key: Res<ButtonInput<KeyCode>>,
21) {
22    if mouse.just_pressed(MouseButton::Left) {
23        cursor_options.visible = false;
24        cursor_options.grab_mode = CursorGrabMode::Locked;
25    }
26
27    if key.just_pressed(KeyCode::Escape) {
28        cursor_options.visible = true;
29        cursor_options.grab_mode = CursorGrabMode::None;
30    }
31}