ボタンを押した際に、アイテムオブジェクトを消してHPの数値を変化させるにはどのような方法をとればいいでしょうか? | Unity Forum | Tech Stadium Forum

ボタンを押した際に、アイテムオブジェク...
 
通知
すべてクリア

ボタンを押した際に、アイテムオブジェクトを消してHPの数値を変化させるにはどのような方法をとればいいでしょうか?  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1373
13/12/2024 12:27 pm  

アイテムリストの作成についてお聞きしたいことがあります。

今回時間がなく、参考の「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の数値を変化させるにはどのような方法をとればいいでしょうか?


引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1336
13/12/2024 12:28 pm  
上記のコードを見て、近い実装手順は以下になります。
  • ItemDataにrecovery変数を追加する。
  • OnClickItemButtonの宣言に仮引数を追加し、EATボタンからアイテムのIndex(itemMasterDataの中の)を仮引数で取得できるように設定する。
  • HPを管理するマネージャーを作成し、OnClickItemButtonメソッドの処理で回復量をゲットし、HPを管理するマネージャーのHPを加算する。

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1373
13/12/2024 12:28 pm  
答えの内容についてお聞きしたいことがあります。
  • ItemDataにrecovery変数を追加する。
ItemDataにrecovery変数を追加しました。
  • OnClickItemButtonの宣言に仮引数を追加し、EATボタンからアイテムのIndex(itemMasterDataの中の)を仮引数で取得できるように設定する。
(1)生成時に「SendIdToItem」のメソッドでアイテムのIDを取得していますが、なぜOnClickItemButtonの宣言時にアイテムのIndexを取得するのですか?(2)OnClickItemButtonの宣言はEATボタンを押した際でよろしいのでしょうか?(3)取得する仮引数は「ButtonBuyItem」のボタンで選択したアイテムのIDでよろしいのでしょうか?OnClickItemButtonの宣言に仮引数を追加及び、EATボタンからアイテムのIndex(itemMasterDataの中の)を仮引数で取得を1日かけて試してみたのですが、うまくいきませんでした。
申し訳ありませんが、実例としてコードを書いて頂けないでしょうかよろしくお願いします。

返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1336
13/12/2024 12:28 pm  

久留さまのコードがわからない状態で提案した手順なので、もしOnClickItemButtonと同じスクリプトで生成したアイテムの変数があれば、またエラーの原因は別のところにありますね。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1336
13/12/2024 12:29 pm  

確認したところ、HpScriptのinventoryItemsはプレハブinventoryItemのinventoryItemsを参照していることが確認できました。こちらがエラーの原因となっています。

プレハブinventoryItemは、シーン上に生成される前にはIDを持っていないはずです。しかし、生成されたアイテムのEATボタンはすべて同じプレハブinventoryItemのinventoryItemsを使って処理が行われています。本来は、各アイテムのinventoryItemsを使用して処理が行われるべきです。
コンポーネントについてまだ完全には理解されていない部分があるようですので、もう一度コンポーネントについて復習いただき、修正をお願いいたします。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1373
13/12/2024 12:29 pm  

修正を行いましたら、うまくできました。
プレハブ「inventoryItem」生成時に回復の数値を取得し、
GetComponentでHPスクリプトに数値を渡しました。
質問に答えて頂きありがとうございました。


返信引用
共有:
タイトルとURLをコピーしました