i-school - 2DタイルマップRPG 手順23
 GameData クラスにて管理している所持アイテムの情報を追加・削除、加算・減算する制御を実装します。


<実装画像 所持アイテムの追加・加算>
動画ファイルへのリンク


<実装画像 所持アイテムの減算・削除>
動画ファイルへのリンク


手順23 −所持しているアイテムの追加・削除機能の追加−
40.GameData スクリプトを修正して、所持しているアイテムの情報の追加・加算する機能を追加する
41.GameData スクリプトを修正して、所持しているアイテムの情報の減算・削除する機能を追加する



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

 ・foreach 文による処理の流れを把握する
 ・作成したメソッドを自由にデバッグする方法を覚える



40.GameData スクリプトを修正して、所持しているアイテムの情報の追加・加算する機能を追加する

1.設計


 GameData クラスにて管理している所持アイテムの情報を追加・削除する制御を実装します。
この機能を追加することで、例えば、買い物をしたアイテムを追加したり、宝箱から獲得したアイテムを追加したり、
売却した場合に削除したりといった機能が実装出来るようになります。

 所持しているアイテムの情報は GameData クラスで管理を行っていますので、
アイテムを獲得した際の追加・削除する処理も、おなじ GameData クラス内に追記して実装するような設計にします。

 これは前回のセーブ・ロードと同じ理由です。アイテムの情報を管理しているクラスであるからだけではなく、
GameData クラスがシングルトンクラスであるため、このクラス内にアイテムの追加・削除用のメソッドを実装しておくことにより、
外部のクラスから任意のタイミングでこれらの処理の呼び出し命令を行いやすくするためでもあります。

 アイテムを獲得したり、使用して消費したり、売却したり、という行動はゲーム内では様々な場面で想定されます。
そのため自由にアイテムの追加・削除が実行できる設計の方が利便性が高いと言えるからです。


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


 実装するメソッドは、アイテムの獲得によるインベントリへの追加処理1つだけです。
それでも一読しただけでは理解が難しいと思いますので、繰り返し読み解いていってください。

 また Update メソッドに、このアイテムを獲得してインベントリに追加する処理の呼び出し命令を実装しておきます。
今回も任意のタイミングでボタンを押してアイテムの獲得処理を行ってみてください。
処理に問題がなければどのスクリプトに記述しても大丈夫でしょう。


GameData.cs

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


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


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


 GameData ゲームオブジェクトのインスペクターより、現在所持しているアイテムの情報である itemInvntryDatasList 変数の Size を 0 にしておきます。
また、isDebug ボタンにチェックを入れてデバッグ用モードに切り替えておきます。

 ゲームを実行して、デバッグ用に用意したボタンを操作してアイテムの獲得によるインベントリへの追加処理を実行してください。
所持していないアイテムの場合には新しく itemInvntryDatasList 変数の Size が増えて、アイテムがインベントリへの追加されます。
すでに所持しているアイテムの場合には、その数が加算されます。


<実装画像 所持アイテムの追加・加算>
動画ファイルへのリンク


 以上でアイテムの追加機能は実装完了です。続いて、指定したアイテムの情報をインベントリより除算、および削除する機能を実装します。


41.GameData スクリプトを修正して、所持しているアイテムの情報の減算・削除する機能を追加する

1.設計


 所持しているアイテムの情報であるインベントリから、指定したアイテムを指定した数だけ除算する処理を実装します。
また、除算の結果、所持数が 0 以下になったアイテムをインベントリより削除する処理も合わせて実装を行います。

 この処理も利用する場所が多岐に渡ると想定されますので、 GameData クラスに実装を行う設計にします。


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


 実装するメソッドは、指定したアイテムの情報を指定した数だけ除算するメソッド1つだけです。
それでも一読しただけでは理解が難しいと思いますので、繰り返し読み解いていってください。

 また Update メソッドに、この作成したアイテムの除算用のメソッドを呼び出す処理を実装しておきます。
今回も任意のタイミングでボタンを押して処理が正常に動くかを確認します。問題がなければどのスクリプトに記述しても大丈夫でしょう。


GameData.cs

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


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


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


 ゲームを実行し、先ほど追加したアイテムをインベントリに追加する処理を実行して、インベントリにアイテムを追加します。
この状態でデバッグ用に用意したボタンを押して、指定されたアイテムの数を除算するメソッドを呼び出します。
アイテムが指定された数だけ除算されていけば制御成功です。また、所持数が 0 以下になった場合にはインベントリより削除されれば制御成功です。


<実装画像 ロード>
動画ファイルへのリンク



 処理が成功したら、デバッグ用に記述した加算メソッドと除算メソッドの引数を変更し、他のアイテムが加算されるかも自分でしっかりと確認しておきましょう。
何故ならば、これらの処理を実際に適宜なスクリプト内に記述して、アイテムを入手できるようにしたりする処理を、自分で考えて実装することなるためです。

 今回のアイテムの加算・減算処理、および前回のセーブやロードも同じですが、特定のタイミングで制御を行いたい処理については、
このように Update メソッド内にデバッグ用に割り当てたボタンを用意しておくことにより、任意のタイミングでの処理のデバッグが可能になります。
またこれらの処理はデバッグモード用でのみ操作できるようにしておく(isDebug 変数が true の間だけ有効になる)ことにより、実際のゲームでは操作できないように制御出来ます。

 実際にはゲーム内のイベントなどのタイミングで処理を実行することになりますが、そのイベントを作る前にこれらの処理を作成しておくことにより、
あとは任意のスクリプトに、適宜なタイミングで用意した処理を実行するだけで、アイテムの加算・除算の処理を実装することが出来ます。

 制御したい処理を考えて、それを実装するにはどういった手順で設計して作っていけばよいかを考えてからプログラムを構築していきましょう。

 自分で製作しているゲームですので、手を加える程、愛着がわいてきます。たくさん自分のアレンジを加えて、楽しみながら製作を行ってください。

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

 次は 手順24 ー探索イベントの実装準備ー です。