アイテムリストの作成についてお聞きしたいことがあります。
今回時間がなく、参考の「ItemList_Ex」を利用して作成しております。
添付している動画のようにアイテムマスターデータに食べた際に回復する値を設定しており、
購入後、「EAT」ボタンを押した際にHPが回復するように作成しております。
InventoryItemsに下記の内容を加え「EAT」ボタンを押した際に設定した
回復値を加えるコードを記載したのですが、 itemListManagerの宣言したHPの値の受け渡しがうまくいきませんでした。
public void OnClickItemButton()
{
ItemMasterData itemdata = ItemMasterData.GetInstance();
ItemData[] itemDatas = itemdata.GetItemMasterData(); recoveryhp = itemDatas[_itemId]._recovery;
itemListManager._hp += recoveryhp;
Destroy(this.gameObject)
}
「EAT」ボタンを押した際に、アイテムオブジェクトを消して
HPの数値を変化させるにはどのような方法をとればいいでしょうか?
- ItemDataにrecovery変数を追加する。
- OnClickItemButtonの宣言に仮引数を追加し、EATボタンからアイテムのIndex(itemMasterDataの中の)を仮引数で取得できるように設定する。
- HPを管理するマネージャーを作成し、OnClickItemButtonメソッドの処理で回復量をゲットし、HPを管理するマネージャーのHPを加算する。
- ItemDataにrecovery変数を追加する。
- OnClickItemButtonの宣言に仮引数を追加し、EATボタンからアイテムのIndex(itemMasterDataの中の)を仮引数で取得できるように設定する。
申し訳ありませんが、実例としてコードを書いて頂けないでしょうかよろしくお願いします。
久留さまのコードがわからない状態で提案した手順なので、もしOnClickItemButtonと同じスクリプトで生成したアイテムの変数があれば、またエラーの原因は別のところにありますね。
確認したところ、HpScriptのinventoryItems
はプレハブinventoryItemのinventoryItems
を参照していることが確認できました。こちらがエラーの原因となっています。
プレハブinventoryItemは、シーン上に生成される前にはIDを持っていないはずです。しかし、生成されたアイテムのEATボタンはすべて同じプレハブinventoryItemのinventoryItems
を使って処理が行われています。本来は、各アイテムのinventoryItems
を使用して処理が行われるべきです。
コンポーネントについてまだ完全には理解されていない部分があるようですので、もう一度コンポーネントについて復習いただき、修正をお願いいたします。
修正を行いましたら、うまくできました。
プレハブ「inventoryItem」生成時に回復の数値を取得し、
GetComponentでHPスクリプトに数値を渡しました。
質問に答えて頂きありがとうございました。