Unityに関連する記事です

 最後の属性情報の利用の実装になります。
バレット選択ボタンの背景画像として、BulletData に登録されている ElementType を利用して、属性の画像を自動的に設定する処理を実装します。

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

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

発展36 −バレット選択ボタンに属性の情報を反映−
72.BulletSelectManager スクリプトを修正し、ElementDataSO スクリプタブル・オブジェクトを利用できる状態にする。バレットのデータからプレイヤーの利用できる BulletData の情報だけを抽出して利用できるようにする
73.BulletSelectDetail スクリプトを修正し、バレットのデータから属性の背景画像を設定する



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

 ・戻り値を持つメソッドの自作
 ・List を利用したスクリプタブル・オブジェクト内のデータの抽出処理の自作



72.BulletSelectManager スクリプトを修正し、ElementDataSO スクリプタブル・オブジェクトを利用できる状態にする。バレットのデータからプレイヤーの利用できる BulletData の情報だけを抽出して利用できるようにする

1.設計


 いままでの学習の復習・応用を行って、設計と実装を行っていきます。

 目標は2つあります。1つはElementDataSO スクリプタブル・オブジェクトを利用した処理を考えること、
もう1つはその処理の結果を戻り値を利用して取得できるようにすること、です。

 ElementDataSO スクリプタブル・オブジェクトはデータベースとして作成してありますが、まだいずれのスクリプトにも変数として登録がありません。
他のスクリプタブル・オブジェクトと同じように、作成したスクリプタブル・オブジェクトは変数に代入することによって利用することが出来るようになります。
まずは、この情報を活用するための処理を考えていきます。

 今回のスクリプタブル・オブジェクトは属性の情報のデータベースになっていますので、その情報を利用して設定を行うスクリプト、
あるいはデータベースを一括で管理するマネージャー(DataBaseManager スクリプト)のようなスクリプトに管理をさせるとよいでしょう。

 教材ではデータベースを一括で管理しているマネージャーはありませんので、今回は、BulletSelectManager スクリプトに変数を用意して、管理をさせます。
あるいは、参照が増えるような場合には、シングルトンクラスである GameData スクリプトに変数を用意をしてもよいです。



 現在 ElementDataSO スクリプタブル・オブジェクトに登録されている情報は、通し番号属性の種類、そして属性の画像です。
これらの情報を活用することにより、バレット選択ボタンの背景画像に、属性の画像を適用できるようにロジックを考えていきます

 各バレットのデータには ElementType として、属性の種類の情報を新しく設定出来るようになっています。
この情報と、ElementData に登録されている ElementType の情報を照合して、合致した属性の種類が含まれている ElementData の画像情報を利用することで
バレット選択ボタンの背景画像として設定できるような処理を、戻り値を活用することを前提に考えてみましょう。

 いままで実装している戻り値を持つメソッドの処理を参考にしてください。



 合わせて、次の手順ではエネミーのバレットに、バレットのデータを反映する処理を実装します。
現在の BulletData にはプレイヤーの使用するバレットのデータのみが登録されていますが、ここにエネミーのバレットのデータも一緒に登録を行います

 そのため、プレイヤーの使用するバレットのデータと、エネミーの使用するバレットのデータとが混在する状態になりますので、
すべてのバレットのデータを利用できてしまうと、プレイヤーがエネミーのバレットのデータを使用してしまう不具合が発生します

 これを防ぐためには、データベースの情報をさらに分類して、必要な情報だけを集めたデータベースを作成する必要があります。
これは以前にも、エネミーを生成する際に、エネミーの種類をボスか、ボス以外かで分類して、それぞれに該当するエネミーのデータのみを抽出した処理を実装していますので、
それをバレットのデータベースにも応用し、プレイヤーの利用できるバレットのデータだけを抽出したデータを作成して、それをバレット選択ボタンの情報として利用するように設計を変更します

 ロジックの考え方は同じですので、EnemyGenerator スクリプトに実装されている List を利用した抽出処理を再度確認してみてください。


2.BulletSelectManager スクリプトを修正し、ElementDataSO スクリプタブル・オブジェクトを利用できる状態にする。合わせて、バレットのデータからプレイヤーの利用できる BulletData の情報だけを抽出する処理を実装する


 設計に基づいて、ロジックを考えてみてください。
いままでの実装がそのまま復習材料として活用できます。

 最初にスクリプタブル・オブジェクトを利用できる状態にします。
その後、その情報を活用した処理のメソッドを作成することを目標にしましょう。


BulletSelectManager.cs


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



 BulletSelectManager ゲームオブジェクトのインスペクターを確認します。
新しく SerializeField 属性で宣言した elementDataSO 変数が追加されています。


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




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


 作成した ElementDataSO スクリプタブル・オブジェクトをドラッグアンドドロップしてアサインしてください。
これでゲーム内で ElementDataSO スクリプタブル・オブジェクトを利用できる状態になりました。


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



 以上で設定は完了です。

 続いて、準備したスクリプタブル・オブジェクトやメソッドを呼び出す処理を実装します。


73.BulletSelectDetail スクリプトを修正し、バレットのデータから属性の背景画像を設定する

1.設計


 BulletSelectManager スクリプトに新しく用意したメソッドは、属性の種類を引数として指定して実行することで、
ElementDataSO スクリプタブル・オブジェクトを照合し、対象となる属性の画像を取得する処理が行えます。

 このメソッドを活用して、バレット選択ボタンの背景画像を自動的に設定する制御処理を実装しましょう。


2.BulletSelectDetail スクリプトを修正し、バレットのデータから属性の背景画像を設定する処理を追加する


 ボタンの背景画像は現在設定がありませんので、Knob の画像に設定されています。
こちらの画像を、BulletData に設定されている、ElementType を利用して属性の画像に変更する制御処理を考えてください。


BulletSelectDetail.cs


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



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


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




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


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

 imgElementTypeBackground 変数に、制御を行いたいコンポーネントがアタッチされているゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
自動的に Image コンポーネントの情報が登録されますので、この変数を利用することによって BulletData にある情報を利用して背景画像の変更が可能になります。


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



 以上で設定は完了です。


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


 ゲームを実行し、生成されたバレット選択ボタンのボタンの背景画像の部分に、BulletData 内に設定している属性の背景画像がそれぞれ設定されれば制御成功です。
 

<実装画像>



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

 次は 発展37 −エネミーのバレット処理の修正− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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