🐦
【Bevy0.13】マウスカーソルのワールド座標の取得(2D)
概要
ウィンドウ上のマウスカーソルのワールド座標をコンソールに出力するプログラムです。
bevyのWindowコンポーネントはウィンドウ上のマウスカーソルの座標を取得するcursor_position()を持っています。それを使えばマウス座標を取得できるのですが、ワールド座標ではなく左上を原点としたウィンドウ座標を返します。
今回はワールド座標を取得したいのでCameraコンポーネントの持つviewport_to_world_2d()を使いウィンドウ座標をワールド座標に変換します。
ソースコード
use bevy::{prelude::*, window::PrimaryWindow};
fn main(){
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, print_mouse_position)
.run();
}
fn setup(mut commands : Commands){
commands.spawn(Camera2dBundle::default());
}
fn print_mouse_position(
q_window : Query<&Window, With<PrimaryWindow>>,
q_camera : Query<(&Camera,&GlobalTransform)>,
){
let window = q_window.single();
let (camera, camera_transform) = q_camera.single();
let op_world_cursor_position = window.cursor_position()
.and_then(|viewport_position|{
camera.viewport_to_world_2d(camera_transform, viewport_position)
});
if let Some(world_cursor_position) = op_world_cursor_position{
println!("{}",world_cursor_position);
}
}
Discussion