i-school - 3Dレールガンシューティング 手順10
 前回にひきつづき、2回に分けて、移動後の地点において、ミッションが発生するかどうかを判定する機能を実装します。

 今後の処理を見込んで、処理を作りたい場所に TODO を記述するようにします。
実際に自分で設計を考えてロジックを組む際にも役立ちますので、使い方を覚えていきましょう。



手順10 ーミッション発生の判定機能ー

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

<学習内容>
 ・TODO の使い方



1.設計


 この手順では前回作成した移動地点の情報を元に、スクリプトによって移動後の地点でミッション(イベント)が発生するかを判定する機能を実装します。
RailPathData クラス内には bool 型の IsMissionTrigger 変数が用意されており、この値が true である場合に、ミッションを実行するようにします。

 ミッションは敵の生成処理を行ったり、武器の取得を行ったりするイベント群の総称です。
そのため、この機能を実装することにより、移動後の地点では、敵が出現したり、武器の取得を行うための準備が出来ます。

 各クラスの役割と役割を実装するための修正は以下の通りです。

 〇RailPathData      新しくミッション判定用の変数を追加する
              現在の状態のまま変数を追加する方法もあるが、ここでは RailPathData クラス内に PathDataDetail クラスを新しく作成して経路の情報を1つのクラスにまとめて運用する

 ◇RailMoveController   CheckArrivalDestination メソッド内で GameManager クラス内の CheckMissionTrigger メソッドを実行する

              SetUpRailMoveController メソッドを作成して GameManager クラスから実行し、RailMoveController クラスの初期設定を行う
              合わせて、SetNextRailPathData メソッドを作成して GameManager クラスから実行し、RailPathData クラスの情報を外部のクラスから引数を通じて受け取るようにする
              このメソッド内で移動を実行するメソッドである StartRailMove メソッドを実行するようにする(経路のセットがない限り、移動を実行しないようにする)
              よってデバッグ用に Start メソッド内で実行していた StartRailMove メソッドはコメントアウトする

 ◇GameManager       SetMissionTrigger メソッドで、各地点ごとのミッションの発生有無の情報を isMissionTriggers 配列変数として作成しておく
              CheckMissionTrigger メソッドが実行されたら、isMissionTriggers 配列変数を確認して、ミッションの発生有無の判定を行う

              RailMoveController クラス内の2つのメソッドを実行する命令を用意する

 今回は RailMoveController スクリプトの修正を修正し、新しく GameManager スクリプトの作成を行います。


2.RailMoveController クラスを修正する


 新しく2つのメソッドを作成します。どちらも GameManager クラスから呼び出されることを想定して引数を準備します。

 また、各パスの地点に到着するたびに CheckArrivalDestination メソッドから GameManager クラスにあるミッションの発生の確認用のメソッドを実行します。
この時点で移動が一旦停止しますので、ミッションの発生が発生しない場合のみ、GameManager クラス側から ResumeMove メソッドに命令を受けて、移動を再開するようにします。

 このような制御を行うことにより、ミッションの発生前には必ず移動を停止し、ミッションの発生状態に応じて移動を再開する制御が実装出来ます。


RailMoveController.cs

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



7.GamaManager クラスを作成する


 RailMoveController クラスに登録していた RailPathData クラスの経路情報を、GameManager クラスに登録します。
こちらに登録されている情報を RailMoveController クラスへと引数を利用して送り出します。

 そのための情報やメソッドを準備するとともに、一緒にミッション用の処理も準備します。
RailMoveController クラスより、ミッションの発生の確認命令が届きますので、それに応じて、その都度、ミッションの発生有無を確認します。

 確認後の実処理はこれからになりますので、まずは Debug.Log メソッドを利用して、判定処理が正常に動作しているかのみを確認し、移動の再開を行います。


GameManager.cs

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



8.GameManager ゲームオブジェクトを作成し、GameManager クラスをアタッチして設定を行う


 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty で新しいゲームオブジェクトを作成します。
名前を GameManager に変更し、作成した GameManager クラスをアタッチしてください。

 インスペクター上から変数をアサインできますので、railMoveController 変数には RailMoveController ゲームオブジェクト、
originRailPathData には RailPathData ゲームオブジェクトをアサインしてください。


<インスペクター画像>


 以上で設定は完了です。


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


 RailPathData の情報は GameManager から RailMoveController へその都度送られるようにします。

 GameManager はすべての経路の情報を管理し、RailMoveController は現在移動を行っている経路のみを管理するようにします。

 そのため、RailMoveController の currentRailPathData 変数は None に変更してください。
ここにゲーム開始時に動的に RailPathData が代入されるように制御を行います。


<インスペクター画像>


 以上で設定は完了です。


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


クラス図を見ると、どちらも参照している情報は RailPathData であることが分かります。

<クラス図>





処理の流れを把握し、ゲームを実行すると、RailPathData が RailMoveController クラスの変数内に代入されることを確認してください。


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



 Debug.Log メソッドを活用し、ミッションの判定処理が正常に動いていることも合わせて確認しておいてください。


<Console ビュー画像>




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

 => 次は 手順11 ー敵の作成ー です。