🦀
chip14. 一人称視点カメラで3D迷路を歩き回る
はじめに
2023/09/28時点の内容です。
- rustc 1.72.1
- bevy 0.11.2
bevyは開発初期段階のOSSで、まだまだ破壊的なアップデートが入ります。
でも、面白いですよ。
1つ前の3D迷路の投稿
- 記事:chip12. 3D迷路を眺める(まだ移動できない)
- リポジトリ:https://github.com/hyoi/chip12
- WASM:https://hyoi.github.io/chip12/
プレイヤーに一人称視点と三人称視点のカメラを埋め込む
Entityの親子関係を使って、以下のようにプレイヤーにカメラを2つ組み込むことを考えます。
何故こうするかと言えば、2つのカメラの座標&向きを管理したくないから。プレイヤーが動いたら勝手についてきて欲しい。
Entityの親子関係を利用すれば、プレイヤーを動かすだけでカメラが着いて来てくれます。
プレイヤーの構造
(Clear box) :親 A
├─(Clear box) :中間親 B
│ ├─PlayerFigure :キャラクターの姿
| └─FppCamera :一人称視点カメラ
└─TppCamera :三人称視点カメラ
- 親Aの位置の変更:キャラクターと一人称視点カメラ、そして三人称視点カメラが移動します。
- 中間親Bの向きの変更:キャラクターと一人称視点カメラの向きが変わります。(三人称視点カメラには影響なし)
カメラ切替(一人称視点⇔三人称視点)
bevy::render::camera::Camera
のis_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; //反転
);
}
一人称視点カメラで3D迷路を歩き回る
カメラ切替と一人称視点カメラ時の操作を追加しました。
- [Space]キー:カメラ切替(一人称視点⇔三人称視点)
- [Esc]キー:アプリ終了 <WASMでは無効>
- [Alt]+[Enter]:フルスクリーン切替 <WASMでは無効>
-
一人称視点の時
- [←][→]キー:左右旋回
- [↑][↓]キー:前進後退
- 三人称視点の時
- 極座標カメラの操作はこれまでと同じ
三人称視点カメラの時に映る球体がPlayerです。黄色が正面
- 極座標カメラの操作はこれまでと同じ
- リポジトリ:https://github.com/hyoi/chip14
- WASM:https://hyoi.github.io/chip14/
Discussion