アイテムを使用するとHPを増やすというものを作りたい | Unity Forum | Tech Stadium Forum

アイテムを使用するとHPを増やすという...
 
通知
すべてクリア

アイテムを使用するとHPを増やすというものを作りたい  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 9:00 pm  

アイテムを使用するとHPを増やすという内容のものを作ろうとしているのですが、
EatButtonを押したときにinfoパネルに表示しているHPの表示に参照する方法がわかりません。

スクリプトのitemmanagerにEatButtonを押した時の結果を参照するのか、
それともEatButtonのスクリプトに直接表示をするような命令にするのかどうすればいいでしょうか


引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 9:01 pm  

ItemListManagerでEatButtonを持つ「InventoryItem」のインスタンスを生成しているので

①ItemListManager内で[SerializeField]を使って先にHPを表示しているテキストを参照
②EatButtonを持つ「InventoryItem」のインスタンスを生成時に、参照しておいたHPのテキストを生成したインスタンスに毎回渡す
③EatButtonが押された時に、生成時に渡されたHPのテキストの中身を書き換える

この様なやり方でいかがでしょうか。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 9:01 pm  

3のHPのテキストを書き換えるのはitemlistmanagerの方になるのでしょうか


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 9:02 pm  

EatButtonを押した時にHPの表示に参照したい、との事なので
EatButtonが押された時に参照するInventoryItem内の「InventoryItems」スクリプトが良いと思います。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 9:02 pm  

③はItemListManager内のスクリプトを外部メンバを呼び出す方法で行うことが出来ました。
しかし今回使用したのはあまり推奨されていない.findでしか思いつきませんでした。
もしほかにも方法があるのでしたら今後の参考のためにも教えて頂けたらと思います。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 9:02 pm  

①Prefab「InventoryItem」の内のスクリプト「InventoryItem」で、
欲しい ItemListManager 内のスクリプトが「ItemListManager」という名前なので、ItemListManager型の変数を作ります。(例)
 [SerializeField] private ItemListManager 変数名 = default;

②スクリプト「ItemListManager」を受け取る関数を、スクリプト「InventoryItem」内で作ります。(例)
public void SetItemListManager( ItemListManager set )
{
   ItemListManager型の変数 = set;
}

③スクリプト「ItemListManager」内の InventoryItem インスタンス生成時に、
先ほどスクリプト「InventoryItem」内で作った ItemListManager を受け取る関数を使ってスクリプト「ItemListManager」を渡します。(例)
GameObject itemObject = Instantiate(_inventoryItemPrefab, Vector3.zero, Quaternion.identity);
itemObject.GetComponent<InventoryItems>().SetItemListManager(this);

④これでスクリプト「ItemListManager」内で、ItemListManager型の変数を使えば
ItemListManager内のスクリプトを外部メンバを呼び出す事ができます。

他にもこの先の授業で習う「delegate」等の方法があります。


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