Unityに関連する記事です

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

発展9 ーステージ機能の実装ー
14.ステージデータを利用して、ステージの番号に応じた MainMap ゲームオブジェクトを生成して自動的に設定を行う機能を実装する



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

 ・1つのシーンを異なる情報を使って運用する方法



14.ステージデータを利用して、ステージの番号に応じた MainMap ゲームオブジェクトを生成して自動的に設定を行う機能を実装する

1.設計


 Start メソッドを利用して、GameData クラスに設定されている StageNo 変数からステージの情報 StageData クラスを取得します。
この情報を利用して、ステージ、防衛拠点の生成を行い、EnemyGenerator クラスに移動経路と生成するエネミーの情報を提供します。

 DefenseBase クラス、EnemyGenerator クラスの Start メソッドは、GameManager クラスから命令を受けてから実行されるメソッドに変更し、
GameManager クラスから命令を受けてから各クラス内の設定を行うように設計を変更しています。

 そのため、ゲームを開始する際の設定情報については、GameManager クラスの Start メソッドがすべての開始地点となり、
ここから各クラスへ設定を行うように命令を出すようにすることで、順序立てた通りに処理を実行していく作りになっています。



 処理のロジックは、スタート地点からゴール地点へ向かって、コメントを書いていくようにします。
その後、ゴール地点側から、スタート地点へ向かって、コメントに沿ったプログラムを実装するようにします。

 このようにロジックを組み立てていくことで、処理の流れを確認しながらプログラムを実装することが出来ます。

 今回であれば、処理のスタート地点は GameManager クラスです。こちらの Start メソッド内が該当します。
TODO を記述していますので、このようにコメントを書いていくといいでしょう。

 GameManager クラス内にメソッドを追加する場合には、この時点でコメントを作っておきます。
コメントは詳細に、記述したい内容を書いておくことでプログラムを作りやすくなります。

 GameManager クラス内のコメントを書き終わったら、ここから先のクラスへ展開します。
ステージデータを参照して処理をしているクラスを見直し、どのクラスに影響があるかを精査します。

 現時点では、DefenseBase クラスにある耐久力の値、EnemyGenerator クラスにあるエネミーの移動経路の情報が、
ステージデータを参照する部分になりますので、該当する変数の部分にそれぞれのクラスにコメントを記述するようにします。

 変数に代入している部分があるのであればその上にコメントを書いて、ステージデータを参照する値にする、と書いておきましょう。



 このとき重要になるのは、どのようにしてステージの情報から各値を参照するようにするかです。
これにはメソッドの引数を上手く活用していきましょう。GameManager クラスから各クラスにあるメソッドを実行する際に、
必要な情報を提供するためには、どのような処理が必要になるかを検討してみてください。

 DefenseBase クラスのように Start メソッドから始まっていて、GameManager クラスから呼び出すためのメソッドがない場合には、
新しく public 修飾子のメソッドを作成して、それを GameManager クラスから実行し、必要な情報を引数を通じて受け取れるようにしましょう。

 今回は先ほども説明したように Start メソッドは GameManager クラスのみとし、他のクラスはメソッドを実行して処理が始めるようにしてみてください。

 このようにして処理の流れをイメージし、イメージしたものをコメントにしていくことで処理の全体像を意識してください



 すべての処理がつながったら、今後は、GameManager クラスに向かって、コメントになっている部分をプログラム化していきます。
EnemyGenerator クラス、DefenseBase クラスを修正してから GameManager クラスのコメント部分をプログラムにできれば、
呼び出す対象のメソッドが完成しているため、エラーも出ずに、キレイな処理の実装が完成出来ます。


2.EnemyGenerator スクリプトを修正する


 設計に基づいて処理のロジックを組んでいきます。
設計で提示したロジックの流れと実装していく内容を1つずつ確認しながら、処理の内容を理解していきましょう。

 GenerateEnemy メソッドは、参照する情報を StageData クラスのものに変更します。
そのため修正箇所が多いですので、気を付けて処理の追加をおこなってください。


EnemyGenerator.cs

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


 スクリプトを修正したらセーブします。


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


 StageData クラスに設定されている耐久力の値を参照して、防衛拠点の耐久力を設定するように処理を修正します。

 Start メソッドを public 修飾子を持つ SetUpDefenseBase メソッドに書き換えて、引数も追加します。
このメソッドを GameManager クラス側から実行してもらって、引数を通じて情報をもらいつつ、設定を行うようにします。


DefenseBase.cs

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


 スクリプトを修正したらセーブを行います。


4.GameManager を修正する


 Start メソッドを利用して、GameData クラスに設定されている StageNo 変数からステージの情報 StageData クラスを取得します。
この情報を利用して、ステージ、防衛拠点の生成を行い、EnemyGenerator クラスに移動経路と生成するエネミーの情報を提供します。

 DefenseBase クラス、EnemyGenerator クラスの Start メソッドは、GameManager クラスから命令を受けてから実行されるメソッドに変更し、
あくまでも、GameManager クラスから命令を受けてから設定を行うように設計を変更しています。

 そのため、ゲームを開始する際の設定情報については、GameManager クラスの Start メソッドがすべての開始地点となり、
ここから各クラスへ設定を行うように命令を出すようにすることで、順序立てた通りに処理を実行していくようになっています。


GameManager.cs


 スクリプトを修正したらセーブをします。


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


 DefenseBasePrefab 変数に、Prefabs フォルダ内にある DefenseBase ゲームオブジェクトのプレファブをドラッグアンドドロップしてアサインしてください。

 currentMapInfo 変数と currentStageData 変数は、ゲームの実行時に GameData クラスに設定した StageNo 変数から参照された StageData クラスから情報が代入されますので、
この部分は空のままで問題ありません。


インスペクター画像



 以上で設定は完了です。


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



 GameData クラスの StageNo 変数を設定し、ゲームを実行します。
空になっていた GameManager クラスの currentStageData 変数にステージの情報が、スクリプタブル・オブジェクトより参照されて代入されれば制御成功です。
その後、その情報を参照して MainMap ゲームオブジェクトと DefenseBase ゲームオブジェクトが生成されて、EnemyGenerator クラスに移動経路の情報が登録されれば制御成功です。

 複数のクラスに情報が設定されるようになりますので、何度もゲームの実行をして、どの部分の処理が制御されているかをしっかり把握しておいてください。


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



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





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

 次は 発展10 ーエフェクト機能の準備− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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