アイテムを使用するとHPを増やすという内容のものを作ろうとしているのですが、
EatButtonを押したときにinfoパネルに表示しているHPの表示に参照する方法がわかりません。
スクリプトのitemmanagerにEatButtonを押した時の結果を参照するのか、
それともEatButtonのスクリプトに直接表示をするような命令にするのかどうすればいいでしょうか
ItemListManagerでEatButtonを持つ「InventoryItem」のインスタンスを生成しているので
①ItemListManager内で[SerializeField]を使って先にHPを表示しているテキストを参照
②EatButtonを持つ「InventoryItem」のインスタンスを生成時に、参照しておいたHPのテキストを生成したインスタンスに毎回渡す
③EatButtonが押された時に、生成時に渡されたHPのテキストの中身を書き換える
この様なやり方でいかがでしょうか。
3のHPのテキストを書き換えるのはitemlistmanagerの方になるのでしょうか
EatButtonを押した時にHPの表示に参照したい、との事なので
EatButtonが押された時に参照するInventoryItem内の「InventoryItems」スクリプトが良いと思います。
③はItemListManager内のスクリプトを外部メンバを呼び出す方法で行うことが出来ました。
しかし今回使用したのはあまり推奨されていない.findでしか思いつきませんでした。
もしほかにも方法があるのでしたら今後の参考のためにも教えて頂けたらと思います。
①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」等の方法があります。