i-school - 2Dタップシューティングゲーム 発展18
 以下の内容で順番に実装を進めていきます。

発展18 ーバレット用のボタンの自動生成ー
37.BulletSelectDetail スクリプトを作成する
38.BulletSelectManager スクリプトを作成し、btnBulletSelect ゲームオブジェクトを自動生成する処理を追加する



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

 ・for 文と Grid Layout Group コンポーネントを利用したインスタンシエイト処理の実装例



37.BulletSelectDetail スクリプトを作成する

1.設計


 先ほどの手順で作成してプレファブにしたバレット選択用のボタンをスクリプトより自動で生成出来るようにします。
現在の手順を確認します。

<設計内容>
〇バレット選択用のボタンを作成し、プレファブにする
・プレファブにしたバレット選択用のボタンを4つ生成し、水平方向へと整列させて並べる
・バレット選択用のボタンを押すことで、常に1つのバレットを選択している状態を作り出す(複数のバレットは同時に選択できない)
・選択しているバレットの種類に合わせて、生成されるバレットの画像を変更する
・複数のバレットのデータを扱うため、エネミーと同じようにバレットのデータ専用のスクリプタブル・オブジェクトを作成し、バレットのデータを登録する
・バレット選択用のボタンを4つ生成する際に、バレットのスクリプタブル・オブジェクトよりデータを受け取って各データに合わせて振る舞いを変更させる

 この手順では、次の実装を行います。

・プレファブにしたバレット選択用のボタンを4つ生成し、水平方向へと整列させて並べる

 上記の実装を、2つの手順に分けて設計を行います。

 プレファブになっているバレット選択用のボタンですが、スクリプトから生成することは可能な状態ですが、
生成されたゲームオブジェクトを操作するためには、専用のスクリプトを作成して、アタッチしておくことが必要になります。

 そのため、まずはバレット選択用のボタンのためのスクリプトを作成し、その後、ボタンを自動生成し、スクリプトを利用して
バレット選択用のボタンの制御を行うようにします。


2.BulletSelectDetail スクリプトを作成する


 このスクリプトの目的は、btnBulletSelect ゲームオブジェクトや、そこにアタッチされているコンポーネントを制御することにあります。
まずは、Button コンポーネントを操作できるように、Button 型の変数を宣言します。


BulletSelectDetail.cs


 スクリプトを作成したらセーブします。


3.btnBulletSelect ゲームオブジェクトに BulletSelectDetail スクリプトをアタッチして設定を行う


 Prefabs フォルダにある btnBulletSelect ゲームオブジェクトを選択し、インスペクターの一番上にある Open Prefab を押してプレファブ編集モードに切り替えます。
BulletSelectDetail スクリプトをドラッグアンドドロップしてアタッチします。

 インスペクターを確認し、BulletSelectDetail スクリプトの btnBulletSelect 変数に適宜な情報をアサインして登録します。


インスペクター画像



 以上で設定は完了です。


38.BulletSelectManager スクリプトを作成し、btnBulletSelect ゲームオブジェクトを自動生成する処理を追加する

 

1.設計


 btnBulletSelect ゲームオブジェクトにスクリプトをアタッチしましたので、
このスクリプトを利用して自動生成を行い、それを List へ代入して管理を行えるようにします。


2.BulletSelectManager ゲームオブジェクトを作成する


 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択します。
新しいゲームオブジェクトが作成されますので、BulletSelectManager に名前を変更します。


ヒエラルキー画像



インスペクター画像



 以上でこのゲームオブジェクトは完成です。次の手順でスクリプトを作成し、このゲームオブジェクトにアタッチします。


3.BulletSelectManager スクリプトを作成する


 プレファブの btnBulletSelect ゲームオブジェクトを生成し、管理するためのスクリプトを作成します。
バレット選択ボタンの数は4つですので、こちらも設定値として変数を用意して利用します。
定数として利用する場合、変数の宣言時 const 修飾子を一緒に宣言することでゲーム内で変化の発生しない値として宣言できます。

 バレット選択ボタンの生成位置には、Grid Layout Group コンポーネントがアタッチされているゲームオブジェクトの Transform を指定します。
こうすることによりバレット選択ボタンは、そのゲームオブジェクトの子オブジェクトとして生成されることになり、
Grid Layout Group コンポーネントの機能によって、生成されたバレット選択ボタンが自動的に水平方向に整列されて並びます
生成されるたびに位置情報を設定していないのはそのためです。この機能がなければ、すべて同じ位置に生成されていまいます。


BulletSelectManager.cs


 スクリプトを作成したらセーブします。


4.BulletSelectManager ゲームオブジェクトに BulletSelectManager スクリプトをアタッチして設定を行う


 ヒエラルキーに作成した BulletSelectManager ゲームオブジェクトに BulletSelectManager スクリプトをドラッグアンドドロップしてアタッチします。

 インスペクターを確認し、BulletSelectManager スクリプトに表示されている変数に適宜な情報をアサインして登録します。
BulletTran 変数には、前回の手順で作成した BulletSelectSet ゲームオブジェクトをアサインしてください。
手動でボタンのプレファブを設置した位置になります。


インスペクター画像



 以上で設定は完了です。


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


 処理を実装したらゲームを実行して挙動を確認します。
BulletSelectManager スクリプトの Start メソッド内に、バレット選択用のボタンを自動生成するメソッドがありますので、
そちらが実行されればバレット選択用のボタンが指定された位置にされます。


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


インスペクター画像



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

 次は 発展19 ー世界観に合わせたゲーム素材の選定ー です。