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 游戏开发
195KB
224 行
bevy_mouse_tracking_plugin
版本
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
,则MousePos
和MousePosWorld
资源仍然存在,但它们始终为零。
鼠标运动
此crate支持通过MouseMotionPlugin
跟踪鼠标运动的资源。可以从任何系统中的MouseMotion
资源中访问运动。
crate名称
最后值得一提的是:此crate的名称故意冗长,因为它很可能最终会被Bevy未来的更新所取代。
我建议在您的 Cargo.toml
中重命名 crate。
[dependencies]
mouse_tracking = { package = "bevy_mouse_tracking_plugin", version = "..." }
许可证:MIT
依赖项
~43–81MB
~1M SLoC