#mouse-input #mouse #bevy #input #gamedev #bevy-plugin #game-engine

bevy_mouse_tracking_plugin

bevy游戏引擎中实现轻松鼠标跟踪的插件

13 个不稳定版本 (6 个破坏性版本)

0.7.0 2023年11月24日
0.6.0 2023年7月14日
0.5.3 2023年1月27日
0.5.0 2022年11月24日
0.1.1 2021年2月23日

#879 in 游戏开发

MIT许可证

195KB
224

bevy_mouse_tracking_plugin

CI bevy_mouse_tracking on crates.io bevy_mouse_tracking docs

版本

Bevy版本 Crate版本
0.12 0.7
0.11 0.6
0.9 0.5
0.8 0.4
0.7 0.2.1
0.6 0.2.0
主分支 主分支

此crate旨在使鼠标跟踪既轻松又明确。跟踪是可选的,并由此插件透明处理。

可以基于每个相机跟踪鼠标,通过查询跟踪组件。此外,如果适用,还维护了一个全局资源来跟踪主相机。

基础

use bevy::prelude::*;
use bevy_mouse_tracking_plugin::prelude::*;

// First, add the plugin to your `App`.

App::new()
    .add_plugins((DefaultPlugins, MousePosPlugin))
    .add_systems(Startup, setup)
    .add_systems(Update, dbg_mouse)
    // ...


fn setup(mut commands: Commands) {
    commands
        // Spawn a camera bundle
        .spawn(Camera2dBundle::default())
        // Opt in to mouse tracking.
        // `InitMouseTracking` is a command that adds the mouse tracking
        // component to the camera with a correct initial value.
        .add(InitMouseTracking);
}

// Now, we can track the mouse position by querying for it.

use bevy_mouse_tracking_plugin::MousePos;

fn dbg_mouse(mouse: Query<&MousePos>) {
    // This will print the screen-space location of the mouse on every frame.
    eprintln!("{}", *mouse.single());
    // If we did `mouse.iter()` instead, this will naturally work for multiple cameras.
}

调用Query::single有点烦人,并且可能存在错误风险。相反,我们可以指定主相机,该插件将特别处理。

use bevy_mouse_tracking_plugin::MainCamera;

fn setup(mut commands: Commands) {
    commands
        // Spawn a camera with tracking.
        .spawn(Camera2dBundle::default())
        .add(InitMouseTracking)
        // Add a component to mark it as the main camera.
        .insert(MainCamera);
}

// Now that we've specified the main camera, we can get the mouse position using a global resource.

fn dbg_mouse(mouse: Res<MousePos>) {
    // This will print the screen-space location of the mouse on every frame.
    eprintln!("{}", *mouse);
}

世界空间

我们可以做得比仅仅屏幕空间更好:此crate通过MousePosWorld支持自动转换到世界空间坐标,这是可以通过组件或资源访问的。

use bevy_mouse_tracking_plugin::MousePosWorld;

fn setup(mut commands: Commands) {
    commands
        .spawn(Camera2dBundle::default())
        // Opt in to world-space mouse tracking.
        // This will automatically opt into screen-space tracking.
        .add(InitWorldTracking)
        // ...
}

// Getting the world-space position using a query.
fn dbg_world_single(mouse: Query<&MousePosWorld>) {
    // This will print the world-space position of the mouse on every frame.
    eprintln!("{}", *mouse.single());
}

// Getting it using the resource.
fn dbg_world_res(mouse: Res<MousePosWorld>) {
    eprintln!("{}", *mouse);
}

请注意,这仅支持二维正交相机,但欢迎提交支持3D的pull请求!

如果您未指定MainCamera,则MousePosMousePosWorld资源仍然存在,但它们始终为零。

鼠标运动

此crate支持通过MouseMotionPlugin跟踪鼠标运动的资源。可以从任何系统中的MouseMotion资源中访问运动。

crate名称

最后值得一提的是:此crate的名称故意冗长,因为它很可能最终会被Bevy未来的更新所取代。
我建议在您的 Cargo.toml 中重命名 crate。

[dependencies]
mouse_tracking = { package = "bevy_mouse_tracking_plugin", version = "..." }

许可证:MIT

依赖项

~43–81MB
~1M SLoC