Appearance
第08回 GameManagerとゲーム状態
前回: 第07回 アイテムとオブジェクトプール / 次回: 第09回 UIとシーン遷移
今回の授業内容
- ステートマシンを構成する状態、遷移、遷移条件、遷移時処理について
- キャラクターの状態とゲーム全体の状態を区別した実装
- 遷移図と遷移表から
GameManagerを実装 - Enemyの撃破をイベントで通知し、GameManagerで集計
- 規定数撃破とPlayer死亡から勝敗を決め、ゲーム進行を停止する
今回の配布コード
08.zipは、第07回終了時点のコードへゲーム状態管理を追加した一式です。
配布ファイル一覧
| ファイル | 今回の変更 |
|---|---|
| GameState.cs | ゲーム全体の状態を定義する |
| GameManager.cs | 状態、撃破数、勝敗、終了処理を管理する |
| DamageReceiver.cs | 死亡した瞬間をイベントで通知する |
| Enemy.cs | 死亡した事実を一度だけ通知する |
| PlayerController.cs | Playerの入力と攻撃を明示的に停止する |
| EnemyController.cs | Enemyの行動と攻撃を明示的に停止する |
| EnemySpawner.cs | 新規生成と管理中Enemyの行動を停止する |
この回で作るもの
第07回までに作成したPlayer、Enemy、アイテムの仕組みを、ゲーム全体のルールへ接続します。Enemyを規定数倒すとゲームクリア、PlayerのHPが0になるとゲームオーバーになり、結果が決まった後はゲームプレイだけを停止します。
| 情報 | 発生元 | GameManagerの判断 |
|---|---|---|
| Enemyを1体倒した | Enemy | 撃破数を1増やす |
| 撃破数が目標へ達した | 撃破数 | ゲームクリアにする |
| PlayerのHPが0になった | DamageReceiver | ゲームオーバーにする |
授業の進め方
1 / 5状態遷移の仕様を決めるゲーム全体の状態を整理し、遷移図と遷移表からGameStateを定義します。2 / 5Enemyの撃破を通知するDamageReceiverとEnemyから死亡の事実をイベントで通知できるようにします。3 / 5GameManagerを実装するイベントを集計し、遷移条件に従ってゲームクリアとゲームオーバーを決定します。4 / 5ゲームプレイを停止するPlayer、Enemy、Spawnerへ明示的な停止処理を追加します。5 / 5Scene設定と動作確認GameManagerをSceneへ設定し、すべての状態遷移と停止処理を確認します。
読み進め方
各ステップでは、最初に「このステップの目的」、最後に「チェックリスト」を示します。必須の実装と操作は本文に置き、仕組みの詳しい説明や発展的な設計は補足として分けています。
この回の最低到達
Ready → Playing → GameClearとReady → Playing → GameOverを確認できる- Enemyの撃破がGameManagerに通知され、撃破数が集計される
- 終了後にPlayer操作、Enemy生成、Enemy行動が停止する
- 状態、遷移、遷移条件、遷移時処理の違いを説明できる