Stateの追加
ゲーム内の画面遷移(タイトル画面、プレイ中、結果表示など)を管理するために、src/state.rs を作成して以下の通り記述します。
#![allow(unused)]
fn main() {
use bevy::prelude::*;
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
pub enum GameState {
/// タイトル画面
#[default]
Home,
/// ゲームプレイ中
Playing,
/// 結果表示画面
Result,
}
pub struct GameStatePlugin;
impl Plugin for GameStatePlugin {
fn build(&self, app: &mut App) {
// AppにGameStateを登録
app.init_state::<GameState>();
}
}
}
GameStateはゲームの現在の状態を表す列挙型です。
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]は、GameStateがClone、Copy、PartialEq、Eq、Hash、Debug、Default、Statesトレイトを実装するためのものです。
Statesは、GameStateがゲームの状態であることを示します。
#[default]は、GameStateのデフォルト値をHomeに設定するためのものです。
GameStatePluginはGameStateを初期化するためのプラグインです。プラグインを作るにはPluginトレイトを実装する必要があります。また、buildメソッドを定義する必要があります。buildメソッドの引数appはAppのインスタンスです。このappにGameStateを追加します。
init_state::<GameState>()は、GameStateを初期化するためのメソッドです。
次にmain.rsのappにGameStatePluginを追加します。
#![allow(unused)]
fn main() {
mod state;
}
によってstate.rsを読み込みます。
また、appにGameStatePluginを追加します。
#![allow(unused)]
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(state::GameStatePlugin) // ← これを追加
.run();
}
これでGameStateが使えるようになりました。