実現したいこと
unityの、ビジュアルスタジオでスクリプトを書いています。
プレイヤーがEキーを押してアイテムを使用した時、
アイテム欄からアイテムを消す処理を書きたいです
プレイヤーが拾ったアイテムを、Item型のitemlstの中に追加しています。
リストの中に追加されたアイテムのスプライトが、
アイテム欄(slots[])の中に順番に表示されていきます
アイテム欄は三つしかないので、
itemlstも三つまでしか入らないようにしました。
slots[]は、ヒエラルキーにある3つのアイテム欄に個別に取り付けられた、複数あるSloteスクリプトを
配列の中に入れています。
リストの中からリムーブしたアイテムのスプライトを、
slots[](アイテム欄)から消したいです。
public class InventryUI : MonoBehaviour
{
public void UpdateUI()
{
slots = WheponSlotPanel.GetComponentsInChildren<Slot>(); for (int i = 0; i < slots.Length; i++) { //もし、拾ったアイテムの数よりもiが小さければ if (i < Inventry.instance.itemList.Count) { slots[i].AddItem(Inventry.instance.itemList[i]); } }
}
Item[] itemlst = Inventry.instance.itemList.ToArray();
for (int k = 0; k < itemlst.Length; k++) { Slot slotsUI= slots[k]; if (Input.GetKeyDown(KeyCode.E)) { Inventry.instance.itemList.RemoveAt(k); slotsUI.ClearItem(slotsInItem); }
}
public class Slot : MonoBehaviour
{
public void AddItem(Item itemAdd)
{
item = itemAdd;
icon.sprite = itemAdd.itemedateicons;
}
public void ClearItem(Item item)
{
slotsItam = item;
slotsItam = null;
icon.sprite = null;
}
}
アイテム欄は、三つ並んでおり、拾ったアイテム(リストの中に入っている)を左から順番に表示します
リムーブしたアイテムのインデックスと、同じインデックスのslotes[]のスプライトを非表示
にしようと思いました。
しかし
Inventry.instance.itemList.RemoveAt(k);
の一行から
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
というエラーが発生しました。
c#です。
どのように修正したら良いのかわかりません。
是非、ご教授お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/04 10:47 編集
2024/11/04 12:06
2024/11/04 12:27