Unityに関連する記事です

 以下の内容で順番に実装を進めていきます。

 ここからはゲームのベースとなるサイクル(ゲーム開始〜終了まで)を作成し、ゲームの流れを作成します。
サイクルが作成できれば、そのサイクル単位で次のサイクル、次のサイクルと順番につながるようなゲームの設計が可能になります。


手順20 −ゲームの進行管理を実装−
42.BattleManagerスクリプトを修正する(ゲームの進行状況を管理するenumを作成して管理を行う)
43.CueLinerスクリプトを修正して、ゲーム開始前まではキューラインを生成できないように制御する



 新しい学習内容は、以下の通りです。

・enumを利用したゲーム状態の管理方法と、それを用いたゲームの進行方法



設計

 
 現在のゲームがどのような進行状況であるのかを把握できないと、ゲームをサイクル化することはできません。
そこでゲームスタートから敵をすべて倒すまでの一連の流れを1つのサイクルとし、それを管理する方法を考えます。

 今回は enum(列挙型) を利用してゲームの進行状態を登録しておき、現在の状態を変数で管理することでサイクル化します。


<enumを利用したゲーム状態の管理方法と、それを用いたゲームの進行方法>


 BattleManagerスクリプトを修正して、ゲームの進行状況を管理する enum である GameState と、その現在の状態を管理する変数とを新しく作成します。

 このGameStateの列挙子にはWaitやPlayといった、ゲームの状況を表現する値を用意し、それを管理用の変数に代入してゲームの進行状況を管理させます。
こうすることでゲームの状態を一元化して管理できます。(複数の異なるゲーム状態が重なることがなくなる)

 ゲームの進行状況の制御処理は以下の通りです。すべてBattleManager内で制御を行うことで処理を管理しやすくしています。
またCueLinerスクリプトのみ、このGamStateを参照し、Wait状態の際にはCueLineゲームオブジェクトを生成できないように制御を追加します。

1.Initializeメソッド内の最初に処理を追加し、GameStateをWait状態に変更する処理を追加する
   ↓
2.Updateメソッド内に処理を追加し、GameStateがPlay状態以外ではUpdateメソッド内の処理が実行されないようにする制御処理を追加する
   ↓
3.Initializeメソッド内の最後に処理を追加し、手球の生成、的球の生成が終了し、ゲームの準備が整った段階でGameStateをPlayの状態に変更する処理を追加する
   ↓
4.GameStateがPlayになったので、停止していたUpdateメソッド内の処理が動き始める(CueLineの生成が行えるようになる)
   ↓
5.CheckRemainingEnemiesメソッド内の判定ですべての敵が破壊されたと判定した場合にはゲームクリアとなり、GameStateがResultに変更になる

 このような制御を行うようにします。この手順を繰り返すようにすれば、サイクル化してゲームを運用出来るようになります。


BattleManagerスクリプトを修正する


 enum 型の GameState を新しく作成します。enum列挙子には、Wait,Play,Result を用意します。これがゲーム進行状態の設定値です。
実際にどの状態であるかを管理するために GamState型の変数を1つ用意し、これが更新されることでゲームの進行状態を一元管理します。

 またStartメソッド、Initializeメソッド、CheckRemainingEnemiesメソッド、Updateメソッドをそれぞれ修正し、GameState関連の処理を追記します。

 順番を追って処理を追加しながら、先ほど説明したゲームの進行状況とどのようにGameStateが関連しているかを確認しながら記述してください。


BattleManager.cs

 <= クリックすると開きます



BattleManagerゲームオブジェクトを確認する


 BattleManagerスクリプトの修正が終了したら、BattleManagerゲームオブジェクトを選択してインスペクターを確認します。
GamState 変数が追加されていますので、プルダウンメニューから変更できることを確認してください。
この値が、ゲームの進行状態に応じて随時切り替わることでゲームの進行状態を管理します。

 確認後はどの状態にしておいも問題ありません。ゲームの実行と同時に更新されていくためです。


BattleManagerゲームオブジェクト インスペクター画像



43.CueLinerスクリプトを修正して、ゲーム開始前まではキューラインを生成できないように制御する

設計


 現在のGamStateの状態を参照し、GamStateがPlay以外の時にはCueLineが生成できないように制御を加えます。
これにより、ゲーム準備中(敵が生成される前)には画面をスワイプしてもCueLineが生成できないような設計にします。


CueLinerスクリプトを修正する


 新しい変数を1つ追加します。BattleManagerクラスの紐づけを取得し、現在のGamStateの状態を参照出来るようにします。
Updateメソッドの開始に処理を追加し、GamStateがPlay以外の時にはCueLineが生成できないように制御を加えます。
これにより、ゲーム準備中(敵が生成される前)には画面をスワイプしてもCueLineが生成できないようになります。


CueLiner.cs

 <= クリックすると開きます



CueLinerゲームオブジェクトの設定を行う


 CueLinerスクリプトの修正が終了したら、CueLinerゲームオブジェクトを選択してインスペクターを確認します。
新しく追加した BattleManager 変数のアサイン情報が追加されていますので設定します。
ヒエラルキーにあるBattleManagerゲームオブジェクトをここにドラッグアンドドロップしてアサインしてください。


CueLinerゲームオブジェクト インスペクター画像



ゲームを実行して動作を確認する


 ゲームを実行し、ゲームの進行状況をDebug.Logに表示されるGameStateの状態を見ながら確認していきます。
BattleManagerゲームオブジェクトのインスペクターを確認していてもいいと思います。

 Initializeメソッド開始時にWaitと表示され、敵の生成などが終了したらPlayと表示されて、CueLineゲームオブジェクトが生成出来るようになります。
その前に画面をスワイプしても生成されてないことも確認してください。

 すべての敵を破壊した際にResultを表示されれば、サイクル化の成功です。


検証動画 Wait => None(敵の生成時のDebug.Log) => Play
https://gyazo.com/22058d278e70d6343acbc564f85b2d13


検証動画◆‥┐鬚垢戮毒鵬すると Reslut に切り替わる
https://gyazo.com/1207342265eb7a5a320eb0c049f09de1


 以上でこの手順は終了です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます