実現したいこと
動画を参考にしてアイテムスロットをPrefabを使ってシーン読み込み時に自動的に作ってくれるように作ったのですが
(スロット数は10個)
実際にアイテムの情報を取得してこのPrefabで自動的に作られたアイテムスロットに
いざ、アイテムを表示させよう・・・とした場合にPrefabで自動的に作られたスロットの指定方法がわからない事に気が付きました。
発生している問題・分からないこと
アイテムスロットについて解説している動画は色々あるのですがどれもアイテムスロットをPrefabを使って自動的に作ってはいなくて
スロット、一つ一つを手動で作ったやつ(最初からヒエラルキー上に存在させている)を使っていてそれだとスロットの指定方法はわかるのですけど・・・・
私が動画を参考に作ったアイテムスロットはシーン読み込み時に作られるアイテムスロットなので
ゲームが始まる前はヒエラルキー上には存在していません。
そういった場合、後からPrefabを使ってシーン読み込み時に自動的に作成されたアイテムスロットは
どのように書けば指定できるのでしょうか。
該当のソースコード
[SerializeField] private GameObject slotPrefab; private int slotNumber = 10; void Start() { // アイテムスロットをfrefabを使って自動で作る機能 for (int i=0; i < slotNumber; i++) { GameObject slotObj = Instantiate(slotPrefab,this.transform); Slot slot = slotObj.GetComponent<Slot>(); slot.SetItem(null); } } ↑でこれでシーン読み込み時に自動的に10個のスロットが作成はされますが・・・・ Prefabで作ったスロット(cloneが10個作られる)の指定方法、コードの書き方がわかりません
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
アイテムスロット10個ぐらいならPrefabで自動的に生成せずに
一つ一つ、スロットをヒエラルキー上に10個作れば解決はすると思うのですが
Prefabを使う練習、勉強をしてみたいのです。
Prefab、便利だけど使うのはとても難しくて・・・でも逃げて使わずにいても向上しないと思うので。
一日ずっと進まない状態が続くようなら諦めて一つ一つ、スロットをヒエラルキー上に10個作ります。
補足
↑上のほう(枠の画像、名前がslot)には「slot」というスクリプトが付いています
「slot」というスクリプトの中身は
private Item item;
[SerializeField]Image image;
private void Awake()
{
image = GetComponent<Image>(); //imageにImageコンポーネントを入れる
}
public void SetItem(Item item)
{
UpdateImage(item); //すぐ下の関数を呼び出してる
}
void UpdateImage(Item item)
{
image.sprite = item.sprite; //Slotのimageにクリックしたアイテムのspriteを入れる
}
↑アイテムがちゃんと入ってはくれるのだがこのように枠の部分の画像に入ってしまう
(上段の3番目のスロットに画像が入ってる、枠の部分なので隠れてあんまり見えてない)
枠の部分では無くて、アイテムの部分に入って欲しいが指定方法がわからない。
slotというスクリプトを、prefabの枠の部分(名前がslot)から外して
中のアイテム(名前がItemImage)の部分へと貼り替えてみましたが
それだとエラー
NullReferenceException: Object reference not set to an instance of an object
で止まってしまう。
↑slot(枠部分)のimageを子オブジェクト(ItemImage)にすれば良さそう、、と思ったのでそれもやってみたのですが、それをしても何も変化が無くて枠の部分を書き換えてしまう症状は何も変わらなかったです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/06/26 21:40 編集
2025/06/27 00:26
2025/06/27 04:11