i-school - 3Dレールガンシューティング 手順19
 前回の手順では武器の情報をデータベースにまとめる機能を追加しました。
この手順では、その武器のデータベースを活用し、現在、プレイヤーの使用している武器の情報を管理する機能を実装します。



手順19 ー使用している武器の情報の管理機能ー



設計


 PlayerController スクリプトには、武器の情報が各変数で用意されていますが、現在は固定値で利用しているため、
どのような武器を使っているか、という情報もなく、また、武器のデータ(攻撃力や射程)はゲーム内においては変化しません。

 そのため、この手順では、次の手順において、武器の切り替え機能を実装するにあたり、現在使用している武器の情報を管理できるようにし、
また、その武器のデータを固定値ではなく、使用している武器に応じて設定を行えるように処理を修正します。

 武器のデータについては、前の手順で作成した WeaponDataSO スクリプタブル・オブジェクトの情報を活用することにより、
データベースとして登録されている武器の情報をゲーム内に反映できる仕組みに修正を行います。


スクリプタブル・オブジェクトを管理する DataBaseManager スクリプトを作成する


 前回の手順で作成した武器のデータベースである WeaponDataSO スクリプタブル・オブジェクトをゲーム内で利用できるようにします。
 スクリプタブル・オブジェクトは今後も増えていく可能性がありますので、特定のクラスに専属で管理をさせることにより、
すべての処理をそのクラス経由で参照する設計にします。

 そのためのクラスとして DataBaseManager クラスをシングルトンデザインパターンとして作成しておきます。
他にもデータベースの機能を有する情報を管理する場合には、こちらのクラスで管理を行う設計にしています。


DataBaseManager.cs

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


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


DataBaseManager ゲームオブジェクトを作成し、DataBaseManager スクリプトをアタッチして設定を行う


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


インスペクター画像


 これで WeaponDataSO スクリプタブル・オブジェクトの情報を、ゲーム内で利用するための準備が整いました。


WeaponDetail スクリプトを作成する


 武器用のゲームオブジェクトにアタッチする前提で作成するスクリプトになります。
その武器が、どのような武器の情報を有しているかを管理するためのクラスを作成します。


WeaponDetail.cs

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




PlayerController スクリプトを修正する


 新しい変数の宣言を行い、現在使用している武器の番号を管理できるようにしましす。
また、 ChangeBulletData メソッドを新しく作成し、引数によって届いた武器の情報を、各武器用の変数の値に初期設定を行います。


PlayerController.cs

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



PlayerController スクリプトのアタッチされているゲームオブジェクトの設定を行う


 PlayerController スクリプトのアタッチされているゲームオブジェクトを選択してインスペクターより、
hp 変数以外の武器の設定情報に関連する値をすべて 0 に設定してください。

 今回 PlayerController スクリプト内に新しく追加した ChangeBulletData メソッドを利用することで、
これらの武器の設定値について、WeaponDataSO スクリプタブル・オブジェクトの情報を引数を通じて受け取り、
その情報を各変数に設定をします。

 そのため、ゲーム実行前のデータはすべて 0 ですが、ゲームが実行された際には各変数に情報が代入されることになります。

 この機能が実装できることで、次の武器の切り替え処理が実装出来るようになります。


インスペクター画像



 以上で設定は完了です。


GameManager スクリプトを修正する


 Start メソッドに処理を追加し、PlayerController スクリプトに追加した ChangeBulletData メソッドの呼び出し命令を実行して、
プレイヤーの初期武器の設定を行うようにします。初期武器のデータは WeaponDataSO スクリプタブル・オブジェクトに登録されている情報を活用します。

 複数のクラスのメソッドを組み合わせた処理のロジックになっているため、どの処理がどのようにつながって利用されているか、
処理の流れを把握しながら、混乱しないように整理しておいてください。


GameManager.cs

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



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


 処理の流れを理解した上で、ゲームのデバッグを行うようにしましょう。
どのような処理が実装されており、それによって、どういった処理が作られているかを理解しておくことにより、
万が一、エラーが発生した場合や、調整を行いたいような場合においても修正を行うことが出来るようになります。

 ゲームを実行し、PlayerController のアタッチされているゲームオブジェクトのインスペクターを確認します。

 武器の情報を表す各変数が WeaponDataSO スクリプタブル・オブジェクトのデータの内容に切り替わっていれば、制御成功です。


ゲーム実行前



ゲーム実行時





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

 => 次は 手順20 ー使用する武器の切り替え機能ー です。