🦀

chip14. 一人称視点カメラで3D迷路を歩き回る

2023/09/28に公開

はじめに

2023/09/28時点の内容です。

  • rustc 1.72.1
  • bevy 0.11.2
    bevyは開発初期段階のOSSで、まだまだ破壊的なアップデートが入ります。
    でも、面白いですよ。

1つ前の3D迷路の投稿

プレイヤーに一人称視点と三人称視点のカメラを埋め込む

Entityの親子関係を使って、以下のようにプレイヤーにカメラを2つ組み込むことを考えます。
何故こうするかと言えば、2つのカメラの座標&向きを管理したくないから。プレイヤーが動いたら勝手についてきて欲しい。
Entityの親子関係を利用すれば、プレイヤーを動かすだけでカメラが着いて来てくれます。

プレイヤーの構造
(Clear box)        :親 A
 ├─(Clear box)     :中間親 B
 │ ├─PlayerFigure :キャラクターの姿
 | └─FppCamera    :一人称視点カメラ
 └─TppCamera       :三人称視点カメラ
  • 親Aの位置の変更:キャラクターと一人称視点カメラ、そして三人称視点カメラが移動します。
  • 中間親Bの向きの変更:キャラクターと一人称視点カメラの向きが変わります。(三人称視点カメラには影響なし)

カメラ切替(一人称視点⇔三人称視点)

bevy::render::camera::Camerais_activeというフィールドを利用します。
一人称視点カメラと三人称視点カメラは排他ですから、カメラEntityにComponentでマークを付けて、System側のQueryで取得すれば、後はさほど悩まず切り替えられます。
以下のようなSystemをAPPビルダーのUpdateに登録すればいいはず。
スペースキーが押されたら切替わるようにしてみました。

//一人称視点カメラ⇔三人称視点カメラ切替
fn switch_fpp_and_tpp
(   mut que_cameras: Query<&mut Camera, Or<( &FppCamera, &TppCamera )>>, 
    inkey: Res<Input<KeyCode>>,
)
{   if ! inkey.just_pressed( KeyCode::Space ) { return } //[Space]キー

    //FppとTppのカメラの状態を反転させる
    que_cameras.for_each_mut
    (   | mut camera |
        camera.is_active = ! camera.is_active; //反転
    );
}

https://docs.rs/bevy/0.11.2/bevy/render/camera/struct.Camera.html

一人称視点カメラで3D迷路を歩き回る

カメラ切替と一人称視点カメラ時の操作を追加しました。

  • [Space]キー:カメラ切替(一人称視点⇔三人称視点)
  • [Esc]キー:アプリ終了 <WASMでは無効>
  • [Alt]+[Enter]:フルスクリーン切替 <WASMでは無効>
  • 一人称視点の時
    • [←][→]キー:左右旋回
    • [↑][↓]キー:前進後退
  • 三人称視点の時
    • 極座標カメラの操作はこれまでと同じ
      三人称視点カメラの時に映る球体がPlayerです。黄色が正面
  • リポジトリ:https://github.com/hyoi/chip14
  • WASM:https://hyoi.github.io/chip14/

https://github.com/hyoi/chip14/blob/master/src/play_game/player.rs

Discussion