Unityに関連する記事です



設計

 
 現在のゲームがどのような進行状況であるのか、どのエリアにいるのかを把握できないと、ゲームをサイクル化することはできません。
 
 今までの手順でエリアの情報を登録し、それをゲーム内に反映する実装を行ってきました。

 ベルトスクロールアクションでは、エリア単位でゲームが進行していきますので、このエリア内のゲームの進行状態を管理できるようにします。
各エリアのサイクル化ができれば、あとはそれをエリアの数だけ繰り返せば1つのステージになります。 


実装の手順


 1.GameManagerクラスを修正する(GameState(enum)を追加し、各メソッド内にGameStateによる分岐を追加する)
 2.ゲームを実行して動作を確認する


新しく学習する内容


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


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


 GamanManagerスクリプトを修正して、ゲームの進行状況を管理するenumであるGameStateを新しく作成します。

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

 ゲームの進行状況の制御処理は以下の通りです。すべてGamanManager内で制御を行うことで処理を管理しやすくしています。

1.InitStageメソッド内に処理を追加し、GameStateをWait状態に変更する処理を追加する。
   ↓
2.Updateメソッド内に処理を追加し、GameStateがWait状態ではメソッド内の処理が実行されないように停止する制御処理を追加する
  またGameStateがMoveの時にはキャラの位置を監視して次のエリアの判定を行う処理を追加する
   ↓
3.SetUpNextAreaメソッド内の処理を追加し、エリアの設定が終了した段階でGameStateをPlayの状態に変更する処理を追加する
   ↓
4.GameStateがPlayになったので、停止していたUpdateメソッド内の処理が動き始める(敵の生成が行われる)
   ↓
5.CheckAreaClearメソッド内の判定でdestroyCountが各エリアの生成数に達した場合、エリアクリアとなりGameStateがMoveに変更になり、次のエリアへ移動できるようになる
   ↓
6.【2】のUpdateメソッドに追加したGameDataゲームオブジェクトがMove状態の際の移動処理が判定されるようになり、次のエリアへ移動するとGameStateがWaitになり、【3】が呼び出される
   ↓
7.エリアの数だけ【3】〜【6】を繰り返す

 このような制御を行うようにします。


1.GameManagerクラスを修正する


 それではGameManagerクラスを修正して、宣言フィールドにGameState(enum)を追加し、ゲームの状態を登録します。
また、このenumを管理する変数を1つ用意します。この変数の値が現在のゲームの状態になります。

 各メソッド内にGameStateによる分岐を追加していきます。追加する部分が多いので、GameManagerクラスを全文掲載します。
書き洩らしがあると正常に動作しませんので、もしも分岐のタイミングでGameStateが変更にならない場合には、その前後の処理を確認してみてください。


GameManager.cs




 修正が終了したら、GameManagerゲームオブジェクトを選択し、GameManagerをインスペクターで確認します。
GameStateを登録するアサイン情報が追加されており、プルダウンメニューでenum修飾子(Play、Move、Wait)を設定出来るようになっているはずです。


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



検証動画 GameState
https://gyazo.com/a1f90870456cc7546d450b02ff244ff7


 GameStateの値はゲームの実行と同時に Wait に設定されるように設計してありますので、いずれの値になっていても問題はありません。


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


 GameStateの各変更のタイミングにDebug.Logを入れてありますので、ゲームの進行状況をログも合わせて確認しながら動作を検証します。

 ゲームの実行後、Wait => Play に切り替わります。Wait => Play へはほぼ一瞬で切り替わります。

検証動画
https://gyazo.com/3cd07beb992795879ec8d2c1f0a6b570


 エリア内の敵をすべて倒すと Play => Move に切り替わり、次のエリアへ移動が可能になります。

 次のエリアへ移動すると Move => Wait へと切り替わり、次のエリアの情報が設定され、それが完了するまでUpdateが一時的に停止します。
そしてまた Wait =>Play へ切り替わり、次のエリアが開始されます。

検証動画◆Move => Wait => Play
https://gyazo.com/3dddb6af53724e9fca2b1943e1bd9676


 これで無事にエリアの進行をサイクル化出来ました。つなげることで1つのステージになります。


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

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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