Skip to content
第08回 GameManagerとゲーム状態

5 / 5 Scene設定と動作確認

このステップの目的

GameManagerをSceneへ設定し、すべての状態遷移と停止処理を確認します。

SceneへGameManagerを設定する

  1. HierarchyにSystemsがない場合は、ルートに空のGameObjectを作成してSystemsと名付けます
  2. HierarchyのSystemsを右クリックし、空のGameObjectを作成します
  3. 名前をGame Managerに変更します
  4. GameManagerコンポーネントを追加します
  5. Player Damage ReceiverへPlayerのDamageReceiverをドラッグします
  6. Player ControllerへPlayerのPlayerControllerをドラッグします
  7. Enemy SpawnerへScene上のEnemySpawnerをドラッグします
  8. Clear Defeat Count10にします
  9. Enemy Prefabが配布版Enemy.csを使用していることを確認します
  10. Sceneを保存します
SystemsのHierarchy
  • Systems
    • Enemy Spawner
    • Heal Item Pool
    • Item Drop System
    • Game Manager

状態遷移をPlay Modeで確認する

この回ではGameManagerの状態を画面上に表示するUIは実装されていません。GameManagerのStateをInspectorで確認できるよう、必要ならDebug表示へ切り替えるか、ChangeState()へ一時的なDebug.Logを追加します。

操作期待する状態と結果
Playを開始するReadyからPlayingへ遷移する
Enemyを1体倒す状態はPlayingのまま、撃破数だけ増える
10体目を倒すGameClearへ遷移し、Player操作、Enemy生成、Enemy行動が止まる
再度Playし、PlayerのHPを0にするGameOverへ遷移し、Player操作とEnemyのゲームプレイ処理が止まる
終了後に待つ状態と撃破数が変化しない

クリアとゲームオーバーが近いタイミングで発生した場合は、最初に遷移した終了状態が維持され、あとから別の結果へ変化しないことも確認します。

確認後は一時的なログを削除します。次回、状態と撃破数を画面へ表示します。

実習:遷移表とコードを対応させる

  1. 遷移表の各行に対応するコード行を探します
  2. CanTransition()からReady → Playingを一時的に削除します
  3. Playして警告と状態を確認します
  4. 条件を元へ戻します
  5. Clear Defeat Countを1と5で比較します
  6. 状態、遷移条件、遷移時処理を自分の言葉で説明します

動作しない場合のチェックリスト

Playingへ遷移しない

  • Consoleに許可されていない遷移の警告がないか
  • CanTransition()Ready → Playingがあるか
  • Game Managerが有効か

撃破数が増えない

  • Enemy Prefabが第08回のEnemy.csを使用しているか
  • GameManagerがOnEnable()でイベントを購読しているか
  • DamageReceiverが死亡時にDiedを発行しているか
  • EnemyがDamageReceiver.Diedを購読しているか

ゲームオーバーにならない

  • Player Damage ReceiverへPlayer自身のコンポーネントを設定したか
  • PlayerのCurrentHealthが実際に0になっているか
  • GameManagerがPlayerのDamageReceiver.Diedを購読しているか

終了後も移動する

  • Player Controller参照が設定されているか
  • EnemySpawner.StopGameplay()が呼ばれているか
  • Enemy PrefabにEnemyControllerが追加されているか
  • 独自に追加した行動コンポーネントにも停止処理が必要ではないか

完成条件

  • 状態、遷移、遷移条件、遷移時処理の違いを説明できる
  • Ready → Playing → GameClearReady → Playing → GameOverを確認できる
  • Enemyの撃破がGameManagerに通知され、撃破数が集計される
  • 許可されていない状態遷移を拒否できる
  • GameManagerが個別キャラクターの行動処理を持っていない

まとめ

  • ステートマシンの基本的な構成要素を理解し実装した
  • 個別キャラクターの状態とScene全体の状態を分離した
  • Enemyは事実を通知し、GameManagerがゲームルールとして勝敗を決定した
  • 終了処理を集約し、多重実行と不正な遷移を防いだ
チェックリスト

Ready → Playing → GameClearReady → Playing → GameOverの両方を確認できる。