Unityに関連する記事です

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

23.GameManagerスクリプトにゲームの進行状況を管理するenumを作成して管理を行う



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

・enumを利用したゲーム状態の管理方法



 ここからは、ゲームのベースとなるゲームサイクルの作成を行っていきます。

<ゲームサイクル>
1.ゲームスタート
   ↓
2.ゲーム プレイ
   ↓
3.ゲーム終了(リザルト表示)
   ↓
4.【1】〜【3】を繰り返す

 まずはこのゲームサイクルを確立するために、GamanManagerスクリプトにゲームの進行状況を管理させる変数を用意し、
現在サイクル内のどの状態でゲームが進行しているかを管理させます。

 また【1】と【2】はすでに実装済ですので、【3】の処理を順番に実装していきます。



23.GameManagerスクリプトにゲームの進行状況を管理するenumを作成して管理を行う

<enumを利用したゲーム状態の管理方法>


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

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

 また次の手順で作成するリザルト用のポップアップについてもTODOを使って準備をしておきます。

 複数の場所で制御を行うようになるため、GamanManagerスクリプトのいろいろな部分を修正します。
また先ほどTODOでUpdateメソッドに用意しておいた処理を実装します。


 ゲームの進行状況の制御処理は以下の通りです。すべてGamanManager内で制御を行います。

1.Updateメソッド内に処理を追加し、GameStateがPlay以外の状態ではメソッド内の処理(干支のドラッグ処理、残り時間のカウント処理)が実行されないように停止する、制御処理を追加する
   ↓
2.Startメソッド内に処理を追加し、GameStateをready(準備中)状態に変更する
   ↓
3.CreateEtosメソッド内の処理を追加し、干支の生成が終了した段階でGameStateの判定を行い、GameStateがReadyの場合に限り(初回の干支生成時のみ)、GameStateをPlay(プレイ中)の状態に変更する
   ↓
4.GameStateがPlayになったので、停止していたUpdateメソッド内の処理が動き始める(干支のドラッグ処理ができるようになり、残り時間のカウントが行われる)
   ↓
5.残り時間が0になったら新しく作成するGameUpメソッドが呼び出されて、GameStateがResultに変更になる。ここでまたUpdateメソッド内の処理が停止する。

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



 それではGamanManagerを修正します。

 修正箇所が多いため、しっかりと処理の順番を考えながら処理を追加してください。
教材を見て書いているだけでは処理の内容を覚えることが出来ませんので、
必ず、処理を書きながら、どういった処理が、どのような順番で動いているのかを自分で意識するようにしましょう。


GameManager.cs

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




 GamanManagerスクリプトの修正が終了したら、GamanManagerゲームオブジェクトをインスペクターで確認します。
新しく追加したGameState変数が表示されていて、プルダウンメニューとして選択できるようになっていると思います。

 初期値は Select になっていると思いますので、そのままにしておいてください。

GamanManagerのインスペクター画像



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


 インスペクターにGamanManagerゲームオブジェクトを選択した状態でゲームを実行します。

 ゲーム開始と同時にGameState変数が Select → Ready → Play と遷移していけば正常な動作です。
また Play の状態になったら、残り時間のカウントが開始されるとともに、ゲーム画面内の干支がドラッグできるようになっているか確認します。
干支の生成中(GameState変数が Ready の状態)では、ゲーム画面内の干支がドラッグできないはずです。

検証動画 GameState変数が Select → Ready → Play と遷移
https://gyazo.com/bc96434aca3e2c981b124415c019abbd


 また残り時間が 0 になった際に Play → Result に遷移していれば、正常な動作です。どちらも問題がないか、確認してください。
デバッグする際にはGameDataのInitTime変数を 60 から 5 などの小さな数字に変更すると確認しやすいです。

 こちらも Result 状態になったら残り時間のカウントが停止して 0 のままになっているかと、干支のドラッグができなくなっているかを確認します。
Updateメソッド内で制御をしているため、どちらも問題なく制御されているはずですので、確認してください。

検証動画◆GameState変数が Play → Result と遷移
https://gyazo.com/faff3ef86e5bb07fb4651fbcbcfc9bd9


 これらのGameState変数が正常に遷移していかない場合には、その遷移処理を行っている前後にエラーがあると思われますので特定して修正をしてください。



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

 次は 手順12 です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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