Unityに関連する記事です

 バレット選択ボタン用のプレファブと BulletDataSO スクリプタブル・オブジェクトを利用し、クローンされたバレット選択ボタンのゲームオブジェクトにバレットのデータを設定し、
同じプレファブから異なるバレット選択ボタンを自動的に生成する処理を実装します。手法はエネミーの場合と同じです。そのため、教材を見ずに、以前の実装を見ながら進めてみてもいいでしょう。

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

発展22 ーバレット用のデータベースの利用◆
45.BulletDataSO スクリプタブル・オブジェクトにバレットのデータを追加する
46.BulletSelectDetail スクリプトと、BulletSelectManager スクリプトを修正し、バレット選択ボタン用のプレファブに BulletDataSO スクリプタブル・オブジェクトのデータを参照して、1つのプレファブから異なるバレット選択ボタンを自動生成する処理を追加する



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

 ・処理の全体像から、ロジックを組み立てて実装を行う



45.BulletDataSO スクリプタブル・オブジェクトにバレットのデータを追加する

1.設計


 無事にバレットのプレファブに BulletData が利用できるようになりました。
この手順では、バレット選択用のボタンにも、BulletData の情報を利用して、ボタンの画像を設定して、1つのボタンのプレファブから
異なるボタンとしての振る舞いをさせる処理を実装します。

 最初にバレットのデータを追加し、それからスクリプトを修正して完成させます。
どのような手順を踏んでいけば完成できるのか、全体の構想のイメージをしながら作業を行ってください。
 

2.BulletDataSO スクリプタブル・オブジェクトにバレットのデータを3つ追加する


 BulletDataSO スクリプタブル・オブジェクトに、バレットのデータを3つ追加します。
バレット選択用のボタンは4つありますので、すべてを異なる内容にすれば、ボタンの内容がそれに合わせて振る舞うようにしていきます。
特に画像が見た瞬間に変化が分かりますので、4つのバレットのボタンの画像とバレットの画像はすべて違う内容で設定してください。

 以下に参考画像を提示しておきます。数字は任意です。


Element 1 炎を吐くクリーチャー



バレット選択ボタンの画像



バレットの画像




Element 2 騎士のクリーチャー



バレット選択ボタンの画像



バレットの画像




Element 3 お化けのクリーチャー



バレット選択ボタンの画像



バレットの画像



 以上で設定は完了です。


46.BulletSelectDetail スクリプトと、BulletSelectManager スクリプトを修正し、バレット選択ボタン用のプレファブに BulletDataSO スクリプタブル・オブジェクトのデータを参照して、1つのプレファブから異なるバレット選択ボタンを自動生成する処理を追加する

1.設計


 Bullet スクリプトを修正して、バレットの画像などを BulletData より設定できるようにしたのと同じように、
バレット選択ボタンについても、それにアタッチされている BulletSelectDetail スクリプトを修正することにより、
こちらも BulletData を参照して、バレット選択ボタンの画像などを設定出来るようにします。

 これはエネミーやバレットの場合と同じですが、1つのプレファブに対して異なる情報を与えることによって、違う役割を持つゲームオブジェクトとして振る舞わせるようにしています。
このような設計をすることで、複数の同じ種類のプレファブを製作する必要はなくなり、データを増やせばそれに合わせて異なるゲームオブジェクトを作成することが可能になります。



 先ほどの手順で Bullet スクリプトを修正したときのことを思い出してください。
Bullet スクリプトでは事前に BulletData の情報は持ち合わせておらず、生成されるまでは1つのプレファブのままです。
バレットが生成されたタイミングで、PlayerController スクリプトによって BulletData の情報が ShotBullet メソッドに届くことによって
そこではじめて Bullet スクリプトには BulletData の情報が届き、利用が出来るようになります。

 今回のバレット選択ボタンの場合も設計手順、ロジックは同じです。
バレット選択ボタンにアタッチされているスクリプトである BulletSelectDetail スクリプトは、BulletData の情報は持ち合わせていません
つまり、BulletSelectDetail スクリプトに用意したメソッドを介して、そのメソッドを実行しているスクリプト側より
BulletData の情報を渡されて始めて、BulletSelectDetail スクリプトでも BulletData が利用出来るようになります。
それから BulletData を利用して、バレット選択ボタンの画像を BulletData の情報に設定することが可能になります。



 以上のことより、今回は BulletSelectDetail スクリプトのみではなく、このスクリプトにあるメソッドを実行している
BulletSelectManager スクリプト側でも処理を修正し、こちらで「どの BulletData を BulletSelectDetail スクリプト側に渡すか」を決定することになります。

 設計の手順としては、BulletSelectDetail スクリプトと、それを生成している BulletSelectManager スクリプトの両方を修正することによって処理を実装します。
また、今回の処理を実装するにあたり、バレット選択ボタンを押したときに、そのバレットのデータを現在使用しているバレットのデータとして更新する処理も一緒に実装します。


2.BulletSelectDetail スクリプトを修正して、BulletDataSO スクリプタブル・オブジェクトのデータを参照して反映する処理を実装する


 設計に基づいて、BulletSelectManager スクリプト側から呼び出されているメソッドの引数を修正しましょう。
そうすることによって、BulletData を受け取る窓口として利用することが可能になります。

 Bullet スクリプトと同じように、画像の変更を行いたいため、変更したい Image コンポーネントの情報を変数に代入しておきます。
こちらも SerializeField 属性で宣言して、インスペクターより事前にアサインしておくといいでしょう。

 また、OnClickBulletSelect メソッド内に、GameData スクリプトに用意してある、現在使用しているバレットの変更を行うメソッドの呼び出し処理を追加してください。
各 BulletSelectDetail スクリプトには、異なる BulletData が設定されていますので、この処理を実行することによって、
GameData スクリプトに設定されている現在使用しているバレットのデータを変更することが出来ます。


 出来れば教材を見ずに、まずは前回の Bullet スクリプトの修正手順を確認しながら、自分で処理を組み立ててみてください。
それから確認するようにすると、ロジックの組み方を学習することが出来ます。


BulletSelectDetail.cs


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



 Prefabs フォルダ内にある btnBulletSelect ゲームオブジェクトのインスペクターを確認します。
新しく SerializeField属性と public 修飾子で宣言した変数が追加されています。


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




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


 btnBulletSelect ゲームオブジェクトを選択して、インスペクターの一番上にある Open Prefab ボタンを押して、プレファブ編集モードに切り替えます。

 BulletData 変数についてはそのままで問題ありません。ゲームが実行されると、ここにデータが届きます。

 imgBulletBtn 変数には同名のゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
Image コンポーネントの情報が登録されますので、この変数を利用することによって BulletData にある情報を利用して画像の変更が可能になります。


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



 以上で設定は完了です。


4.BulletSelectManager スクリプトを修正し、バレット用のプレファブに BulletDataSO スクリプタブル・オブジェクトのデータを参照して、1つのプレファブから異なるバレット選択ボタンを自動生成する処理を追加する


 BulletSelectDetail スクリプトの SetUpBulletSelectDetail メソッドに引数を追加して BulletData を受け取れるようにしましたので、
BulletSelectManager スクリプトの処理を修正し、バレット選択ボタンを生成したあとに実行している SetUpBulletSelectDetail メソッドに引数を追加して、
BulletDataSO スクリプタブル・オブジェクトの情報を、それぞれに、1つずつ異なる情報を渡すようにします。

 4つのバレット選択ボタンが生成される際にこのように設定を行うことで、 BulletData の情報を利用して、自動的に各バレット選択ボタンの振る舞いを変更しています。
そのため結果的に、1つのバレット選択ボタンのプレファブから、異なる4つのバレット選択ボタンを生成することが出来るようになります。


BulletSelectManager.cs


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


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


 すべての実装が完了したら、スクリプトを見直して処理の流れを確認してから、ゲームを実行してください。
バレット選択ボタンが生成された際に、すべてのボタンの画像が、BulletData の情報を参照して自動的に変更になります。


<実装動画 .丱譽奪帆択ボタンの画像がすべて BulletData の情報に基づいた内容に設定されている>
動画ファイルへのリンク


 バレット選択ボタンを押してバレットを変更してください。
BulletSelectDetail スクリプト内の OnClickBulletSelect メソッドが実行されて、
GameData スクリプトの使用しているバレットのデータ(currentBulletData 変数)が、選択したバレットの BulletData の内容で更新されます。
そのため、バレットを発射すると、選択しているバレットのデータを元にバレットが発射されますので、速度や、画像が変更になっています。
GameData ゲームオブジェクトのインスペクターも確認しながらチェックしてください。


<実装動画◆.丱譽奪帆択ボタンを押すと、GameData スクリプトの使用しているバレットのデータが更新されて、選択しているバレットのデータを用いて画像が変更になる>
動画ファイルへのリンク


 以上の2つの制御が行われていれば制御成功です。

 バレットの画像やボタンは無事に変更になりました。ただし、まだエネミーに与えるダメージについては、EnemyController スクリプトを修正していないので、
Bullet スクリプトにある bulletPower の値のままになっています。次の手順では、エネミーに与えるダメージを BulletData の情報を利用した内容に変更します。


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

 次は 発展23 −バレット用の発射時間の制御− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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