Пишу систему инвентаря, есть класс предмета:
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)
Data? Там явноnull, вы ему ничего не присвоили после объявленияpublic DataBase Data;– CrazyElf Oct 23 '20 at 17:52