Bevyでマウスカーソルの位置を取得する方法


まず、Bevyプロジェクトをセットアップします。Bevyの公式ドキュメントに従って、必要な依存関係を追加し、プロジェクトを初期化します。

次に、マウスカーソルの位置を取得するためのシステムを作成します。Bevyでは、システムという単位でゲームの振る舞いを定義します。以下の例では、マウスカーソルの位置を取得するシステムを作成します。

use bevy::prelude::*;
fn main() {
    App::build()
        .add_plugins(DefaultPlugins)
        .add_startup_system(setup.system())
        .add_system(get_cursor_position.system())
        .run();
}
fn setup(commands: &mut Commands) {
    commands.spawn_bundle(OrthographicCameraBundle::new_2d());
}
fn get_cursor_position(
    windows: Res<Windows>,
    mut cursor_position: ResMut<CursorPosition>,
) {
    if let Some(window) = windows.get_primary() {
        if let Some(cursor_position_in_window) = window.cursor_position() {
            cursor_position.position = cursor_position_in_window;
        }
    }
}
struct CursorPosition {
    position: Vec2,
}

上記の例では、get_cursor_positionというシステムが定義されています。このシステムは、Res<Windows>ResMut<CursorPosition>を引数として受け取ります。Res<Windows>はウィンドウ管理に関するリソースを持ち、ResMut<CursorPosition>はマウスカーソルの位置を保持するリソースです。

get_cursor_position関数内では、windows.get_primary()を使用してプライマリウィンドウを取得し、window.cursor_position()を使用してマウスカーソルの位置を取得しています。取得した位置情報はcursor_position.positionに格納されます。

最後に、このシステムを実行するためにBevyアプリケーションをビルドし、起動します。マウスカーソルの位置はcursor_position.positionから取得することができます。

これで、Bevyを使用してマウスカーソルの位置を取得する方法を学びました。ゲーム開発においては、この方法を応用してさまざまな機能を実装することができます。ぜひ試してみてください!