Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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)]は、GameStateCloneCopyPartialEqEqHashDebugDefaultStatesトレイトを実装するためのものです。 Statesは、GameStateがゲームの状態であることを示します。 #[default]は、GameStateのデフォルト値をHomeに設定するためのものです。

GameStatePluginGameStateを初期化するためのプラグインです。プラグインを作るにはPluginトレイトを実装する必要があります。また、buildメソッドを定義する必要があります。buildメソッドの引数appAppのインスタンスです。このappGameStateを追加します。

init_state::<GameState>()は、GameStateを初期化するためのメソッドです。

次にmain.rsappGameStatePluginを追加します。

#![allow(unused)]
fn main() {
mod state;
}

によってstate.rsを読み込みます。

また、appGameStatePluginを追加します。

#![allow(unused)]
fn main() {
App::new()
    .add_plugins(DefaultPlugins)
    .add_plugins(state::GameStatePlugin) // ← これを追加
    .run();
}

これでGameStateが使えるようになりました。