Rustでゲームを作る - パート5 - 動き


ジャンプについてでした.そこでは、プレイヤーの入力を取得して垂直方向の動きに変換する方法を学びました.今回は、学んだことを活用して、プレーヤーを左から右に動かしてみましょう.

ムーブメントシステム



プレーヤーの移動を担当する新しいシステムを追加することから始めましょう.

fn player_movement(
    keyboard_input: Res<Input<KeyCode>>,
    mut players: Query<(&Player, &mut RigidBodyVelocity)>
) {
    for (player, mut velocity) in players.iter_mut() {
        if keyboard_input.pressed(KeyCode::Left) {
            velocity.linvel = Vec2::new(-player.speed, velocity.linvel.y).into();
        }
        if keyboard_input.pressed(KeyCode::Right) {
            velocity.linvel = Vec2::new(player.speed, velocity.linvel.y).into();
        }
    }
}


このシステムは、キーボードの左右のキーをリッスンします.これらのキーのいずれかが押されると、システムはプレーヤーの線形速度を x 軸のプレーヤー速度プロパティ + または - に設定し、プレーヤーの速度の y コンポーネントを現在の y 速度に設定します.これにより、左または右を押しても、進行中のジャンプが停止することはありません.

システムが機能するには、次のものが必要です.
  • 登録するには:

  • .add_system(player_movement.system())
    


  • speed プロパティをプレーヤーのコンポーネントに追加するには:

  • struct Player {
        speed: f32
    }
    


  • プレーヤーの速度を設定するには:

  • .insert(Player { speed: 3.5 })
    


    一方、プレーヤーの jump_impulse を 7 に下げました.

    ゲームを実行すると、キーボードの左または右のキーを押すことで、プレーヤーを左または右から移動させることができるはずです.

    もっと遠く行く



    Bevy は、複数のタイプのユーザー入力方法をサポートしています.キーボード イベントを処理する 1 つの方法を学びましたが、マウス、タッチスクリーン、および/またはゲームパッドでも同じことができます.

    また、キーボードの現在の状態を見て、ユーザー入力を処理することも学びました.これを行う別の方法があります: イベント経由です.一部のタイプの入力はイベントとしてのみ提供されることに注意してください.

    Bevy's unofficial cheat book を読んで、サポートされている入力方法とそれらの処理方法について詳しく知ることができます.

    カメラでプレーヤーを追跡する



    プレイヤーは移動できるようになりましたが、プレイヤーが画面外に出るとカメラが見えなくなります.プレーヤーの動きに合わせてカメラが追従してくれるとよいでしょう.これを行う 1 つの方法は、カメラをプレーヤーの子として宣言することです.

    .with_children(|parent| {
        parent.spawn_bundle(new_camera_2d());
    })
    


    また、setup システムから古いカメラを削除し、setup システムが空になったので削除する必要があります.

    このアプローチは機能しますが、いくつかの注意点があります.このチュートリアルのパート 10 で、より良い代替手段について学びます.

    最終的なコードは here です.