Unityに関連する記事です

 この手順では、実装したゲーム終了の値を利用して、ゲーム終了の状態になったらバレットの生成とエネミーの生成処理を停止する制御を実装します。


<実装動画 .押璽狃了の状態になったら、画面をタップしてもバレットを生成できないようにする>
動画ファイルへのリンク


<実装動画◆.押璽狃了の状態になったら、エネミーの生成を停止する>
動画ファイルへのリンク


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

手順20 −ゲーム終了判定の値を利用した制御処理の実装−
41.GameManager スクリプトと、PlayerController スクリプトを修正して、ゲーム終了の判定に伴って、タップしてもバレットを生成できないようにする制御を追加する
42.GameManager スクリプトと、EnemyGenerator スクリプトを修正して、ゲーム終了判定に伴って、エネミーの自動生成処理を停止する制御を追加する



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

 ・スクリプトの参照利用方法
 ・学習内容の復習
 ・条件式時のbool型の省略記法



41.GameManager スクリプトと、PlayerController スクリプトを修正して、ゲーム終了の判定に伴って、タップしてもバレットを生成できないようにする制御を追加する

1.設計


 GameManager スクリプトに用意したゲーム終了用の判定値は、拠点の耐久力が 0 以下になることで true となり、
この値を条件式に用いることによって「ゲーム終了の状態でなければ」、「ゲーム終了の状態になったら」という条件分岐を作成できるようになりました。

 この手順では最初に、プレイヤー側の制御を実装します。

 設計としては、バレットの生成を制御することになりますので、バレットの生成処理を行っているスクリプトの処理を制御することと同義です。
バレットの生成処理は PlayerController スクリプト内の Update メソッド内においてタップ感知と生成処理を実行するようになっていますので、
この部分を制御することが大切になります。

 ゲーム終了の状態になっていなければバレットの生成が行えて、ゲーム終了の状態になったときにはバレットの生成が行えなくなる、という制御イメージです。

 制御文は if 文を利用することで実装可能です。このとき、制御の式は以下のどちらでも構いません。

 1.「ゲーム終了の状態になったときに」バレットの生成処理を実行できないように制御する
 2.「ゲーム終了の状態になっていないときにだけ」バレットの生成処理を実行できるように制御する



 この「ゲーム終了」の情報を扱うためには、PlayerController スクリプトに GameManager スクリプトの情報が必要になります。
つまり、1つ前の手順で学習した DefenseBase スクリプトのように、GameManager スクリプトの情報を受け取る窓口となるメソッドを用意することを考えましょう。
DefenseBase スクリプトには Start メソッドを書き換えましたが、PlayerController スクリプトには Start メソッドがありませんので、
新しく public 修飾子のメソッドを作成し、引数として GameManager スクリプトを指定するようにします。これも、DefenseBase スクリプトと同じ方法です。

 GameManager スクリプトの情報を取得するためのメソッドを用意して、GameManager スクリプト側から、そのメソッドを呼び出してもらうようにすれば
ヒエラルキー内の検索をして GameManager スクリプトを探すことなく、必要な情報を PlayerController スクリプトが受け取って利用することが出来ます。


2.PlayerController スクリプトを修正し、GameManager スクリプトの情報を利用してゲーム終了の状態になったら、バレットの生成を停止させる制御を実装する


 前回の DefenseBase スクリプトの実装を見直しながら、GameManager スクリプトを代入するための変数の宣言
GameManager スクリプトを受け取るためのメソッド、そして、変数に代入された GameManager スクリプトの情報から、isGameUp 変数を利用して、
バレットの生成の制御を行うように処理を考えて記述してください。

 最初に日本語でコメントを書く手法については、今後は明記しませんが、基本的にはその手法を使って、どの部分に処理を記述すればよいのかを視認できる状態で処理を書き始めた方が、
ロジックは組みやすく、またコメント自体も残るため非常に便利です。是非今後も日本語でコメントを書いてから処理の記述を行ってください


 下記の実装例は、こちらの制御方法で記述していますが、2の方の記述方法でもまったく問題ありません。
自分で考えた処理で実装を進めてください。その場合は、この教材の記述を見ながら、return キーワードの利用方法を学習してください。

 1.「ゲーム終了の状態になったときに」バレットの生成処理を実行できないように制御する


PlayerController.cs

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



3.<条件式時のbool型の省略記法>


 bool型は条件式の判定の際に、省略記法が使用できます。

 if(bool型の変数名){ 
      // 処理
 }  

 この省略記法は

 if(bool型の変数名 == true){
      // 処理
 } 

 と同義です。



 if(!bool型の変数名){ 
      // 処理
  }

 この省略記法は

 if(bool型の変数名 == false){
      // 処理
  }

 と同義です。



 今回は isGameUp 変数の条件式に、下の省略記法を利用しています。
if(gameManager.isGameUp){ } // isGameUp 変数の値が true ならば、という意味です


4.GameManager スクリプトを修正する


 こちらも前回の手順で利用した方法と同じ設計でロジックを考えましょう。

 PlayerController スクリプトの情報を SerializeField 属性の変数を作成して、インスペクターより事前にアサインして取得しておいて、
Start メソッド内で、DefenseBase スクリプトの SetUpDefenseBase メソッドを呼び出したときと同じように PlayerController スクリプトに作成した
SetUpPlayer メソッドを呼び出す命令を記述して、引数として GameManager を渡すようにしてください。


GameManager.cs

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


 スクリプトを修正したらセーブします。
GameManager ゲームオブジェクトのインスペクターを確認し、新しく SerializeField 属性で宣言した変数が表示されているか確認しておきます。


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




5.GameManager ゲームオブジェクトの設定を行う


 GameManager ゲームオブジェクトを選択し、インスペクターより GameManager スクリプトの変数に必要な情報をアサインして登録します。
どのゲームオブジェクトにアタッチされている情報が必要か考えて、ドラッグアンドドロップしてアサインしてください。


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



 以上で設定は完了です。


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


 以上により実装が完了しましたので、ゲームを実行して、耐久力を 0 以下にして、ゲーム終了状態にしてください。
isGameUp 変数が true になったあとは、画面をタップしてもバレットの生成が行われなくなれば制御成功です。
 

<実装動画>
動画ファイルへのリンク


 続いて、同じくゲーム終了の状態を利用して、エネミーの生成処理も制御する処理を実装します。



42.GameManager スクリプトと、EnemyGenerator スクリプトを修正して、ゲーム終了判定に伴って、エネミーの自動生成処理を停止する制御を追加する

1.設計


 考え方は、先に実装した PlayerController スクリプトと GameManager スクリプトの実装内容と同じです。

 こちらでは、バレットの生成ではなく、エネミーの生成を制御することになりますので、エネミーの生成処理を行っているスクリプトの処理を制御することになります。
エネミーの生成処理は EnemyGenerator スクリプト内の Update メソッド内において生成の準備処理を実行するようになっていますので、
この部分を制御することが大切になります。

 ゲーム終了の状態になっていなければエネミーの生成が行われて、ゲーム終了の状態になったときにはエネミーの生成が行われなくなる、という制御イメージです。

 制御文も、バレットの制御とおなじで if 文を利用することで実装可能です。このとき、制御の式は以下のどちらでも構いません。

 1.「ゲーム終了の状態になったときに」エネミーの生成準備処理を実行できないように制御する
 2.「ゲーム終了の状態になっていないときにだけ」エネミーの生成準備処理を実行できるように制御する

 エネミーの生成は、実際に生成を行っているメソッドと、その前に、時間の計測を行って生成の準備を行っているメソッドの2つに分かれています。
このような場合、一番肝心な部分である生成の準備を停止させることを考えてください。



 PlayerController スクリプトと同じで、この「ゲーム終了」の情報を扱うためには、EnemyGenerator スクリプトに GameManager スクリプトの情報が必要になります。
EnemyGenerator スクリプトにも GameManager スクリプトの情報を受け取る窓口となるメソッドを用意することを考えましょう。
設計方法やロジックは、先の2つの実装(DefenseBase、PlayerController)と同じです。

 GameManager スクリプトの情報を取得するためのメソッドを用意して、GameManager スクリプト側から、そのメソッドを呼び出してもらうようにすれば
ヒエラルキー内の検索をして GameManager スクリプトを探すことなく、必要な情報を EnemyGenerator スクリプトが受け取って利用することが出来ます。

 同じ設計上、GameManager スクリプトにも今までと同じように、新しく作成したメソッドを呼び出す処理を実装する必要があることが分かります。


2.EnemyGenerator スクリプトを修正して、GameManager スクリプトの情報を利用して、ゲーム終了の状態になったらエネミーの生成を停止する制御を実装する


 DefenseBase スクリプト、PlayerController スクリプトを参考にしながら、処理を記述してみてください。
制御をする部分は生成の準備を行う部分に対して実装したいので、 Update メソッド内が処理を記述する対象の場所になります。

 下記の実装例は、こちらの制御方法で記述していますが、1の方の記述方法でもまったく問題ありません。
自分で考えた処理で実装を進めてください。その場合は、この教材の記述を見ながら、return キーワードを利用しない方法を学習してください。

 2.「ゲーム終了の状態になっていないときにだけ」エネミーの生成準備処理を実行できるように制御する


EnemyGenerator.cs

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




3.GameManager スクリプトを修正する


 こちらも前回の手順で利用した方法と同じ設計でロジックを考えましょう。
詳細説明は省略します。今までの復習になりますので、まずは自分で処理を書いて実行し、思っているような挙動になるか試してください。


GameManager.cs

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


 スクリプトを修正したらセーブします。
GameManager ゲームオブジェクトのインスペクターを確認し、新しく SerializeField 属性で宣言した変数が表示されているか確認しておきます。


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




4.GameManager ゲームオブジェクトの設定を行う


 GameManager ゲームオブジェクトを選択し、インスペクターより GameManager スクリプトの変数に必要な情報をアサインして登録します。
どのゲームオブジェクトにアタッチされている情報が必要か考えて、ドラッグアンドドロップしてアサインしてください。


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



 以上で設定は完了です。


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


 以上により実装が完了しましたので、ゲームを実行して、耐久力を 0 以下にして、ゲーム終了状態にしてください。
isGameUp 変数が true になったあとは、エネミーの生成が行われなくなれば制御成功です。
 

<実装動画>
動画ファイルへのリンク


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

 次は 手順21 −バレットによるヒット・エフェクトの実装− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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