Задать вопрос
@AndRussia

Как правильно обратиться к функции в классе?

Здравствуйте. У меня имеется метод AddItem в классе Inventory
public void AddItem(int id, Item item, int count)
    {
        items[id].id = item.id;
        items[id].count = count;
        items[id].itemGameObject.GetComponent<Image>().sprite = item.img;
        if (count > 1 && item.id != 0)
        {
            items[id].itemGameObject.GetComponentInChildren<Text>().text = count.ToString();
        } else
        {
            items[id].itemGameObject.GetComponentInChildren<Text>().text = "";
        }
    }

Я в другом файле, в классе RockTrigger пытаюсь в эту мою систему инвентаря добавить предмет
Inventory inv = new Inventory();
inv.AddItem(0, inv.items[1], 1);

В самом Unity задаю предметы для переменной items
PQHDF.png
и при использовании inv.AddItem(0, inv.items[1], 1); получаю следующую ошибку:
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Я так понял, он считает, что не существует предмета с id 1 в items. Но это не так. Что я делаю не правильно?

Update:
Я ошибся, нужно было использовать inv.data.items[1]. data берется из другого файла и класса
public class DataBase : MonoBehaviour
{
    public List<Item> items = new List<Item>();
}

И ошибка соответственно уже другая
NullReferenceException: Object reference not set to an instance of an object
RockTrigger.Update () (at Assets/Scripts/RockTrigger.cs:26)

Та самая 26 строчка:
inv.AddItem(0, inv.data.items[1], 1);
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
inv.AddItem(0, inv.items[1], 1);
Вы только что создали пустой инвентарь, но пытаетесь добавить (хотя по коду заменить) нулевой элемент первым элементов.
Откуда берётся первый элемент для замены?
Откуда берётся нулевой элемент под замену?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы