NullReferenceException юнити система инвентаря

Пишу систему инвентаря, есть класс предмета:

public class Item
{
    public int Id;
    public string Name;
    public Sprite Img;

    public Item(int id, string name)
    {
        Id = id;
        Name = name;
        Img = Resources.Load<Sprite>("Sprites/items/" + name + ".png");
    }
}

Класс слота:

public class Slot
{
    public enum Type
    {
        STORAGE,
        HEAD,
        BODY,
        LEGS,
        BELT
    }

    public int Id;
    public bool Empty;
    public Item ItemInSlot;
    public Type SlotType;

    public Slot(int id, Type type)
    {
        Id = id;
        Empty = true;
        ItemInSlot = null;
        SlotType = type;
    }
}

И класс DataBase со всеми предметами:

public class DataBase : MonoBehaviour
{
    public List<Item> Items;

    private void Start()
    {
        Items = new List<Item>
        {
            new Item(0, "test-item-1"),
            new Item(1, "test-item-2"),
            new Item(2, "test-item-3")
        };
    }
}

В скрипте, который висит на панели инвентаря есть функция AddItem():

    public void AddItem(Item item)
    {
        for(int i = 0; i < inventory.Slots.Count; i++)
        {
            if (inventory.Slots[i].Empty)
            {
                inventory.Slots[i].Empty = false;
                inventory.Slots[i].ItemInSlot = item;
            }
        }
    }

Эту функцию я вызываю на старте и при запуске ошибка NullReferenceException.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InventoryStorage : MonoBehaviour
{
    public DataBase Data;

    public int InventorySize;
    public GameObject SlotPrefab;

    private Inventory inventory;

    private void Start()
    {
        inventory = new Inventory(InventorySize);
        DrawSlots();

        AddItem(Data.Items[0]);
    }

Ошибка на 20 строке AddItem(...); В инспекторе все поля скрипта заполнены. В чём может быть проблема? Я знаю что это за ошибка, но не могу найти где в коде используется null. Полный текст ошибки:

NullReferenceException: Object reference not set to an instance of an object InventoryStorage.Start () (at Assets/Scripts/InventoryStorage.cs:20)


Ответы (1 шт):

Автор решения: CrazyElf
public DataBase Data; // null

После такого объявления в Data находится null - значение по умолчанию для объектов reference type, в частности для классов.

AddItem(Data.Items[0]);

Вы тут берёте .Items от null, вот и выходит ошибка. Вам надо как-то проинициализировать поле Data - присвоить туда новый объект типа DataBase, например, но и после этого будет та же ошибка, поскольку в Data.Items будет снова null, надо заполнить ещё и это поле.

public List<Item> Items; // null
→ Ссылка