0

I have been having a problem while following a inventory tutorial and because my inventory is different to his I have done things a bit differently

I was attempting to make a item using colliders, so it could add the item to the inventory. I am not very sure about how this works as it is new to me and it give me this error-

NullReferenceException: Object reference not set to an instance of an object
Item.GetSprite () (at Assets/Inventory/Item.cs:22)
UI_Inventory.RefreshInventoryItems () (at Assets/Inventory/UI_Inventory.cs:32)
UI_Inventory.SetInventory (Inventory inventory) (at Assets/Inventory/UI_Inventory.cs:22)
PlayerController.Awake () (at Assets/PlayerController.cs:81)

the code is below-

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

public class Item
{

    public enum ItemType
    {
        Pistol,
        Shield,
        Health,
    }

    public ItemType itemType;
    public int amount;



    public Transform GetSprite()
    {
        switch (itemType)
        {

            default:
            case ItemType.Health: return ItemAssets.Instance.healthSprite;
            case ItemType.Shield: return ItemAssets.Instance.shieldSprite;
        }

    }
}

Here is the other one-

public void SetInventory(Inventory inventory)
{
    this.inventory = inventory;
    RefreshInventoryItems();
}

private void RefreshInventoryItems()
{
    int x = 0;
    foreach (Item item in inventory.GetItemList())
    {
        if (x == 0)
        {
            itemImage = item.GetSprite();
            var createImage = Instantiate(itemImage, new Vector2 (Slot1.position.x, Slot1.position.y), Quaternion.identity);
            createImage.transform.position = new Vector2(-330, -90);
            createImage.transform.SetParent(canvas.transform, false);

        }
        if (x == 1)
        {
            itemImage = item.GetSprite();
            var createImage = Instantiate(itemImage, new Vector2(Slot2.position.x, Slot2.position.y), Quaternion.identity);
            createImage.transform.position = new Vector2(-260, -90);
            createImage.transform.SetParent(canvas.transform, false);
        }
        if (x == 2)
        {
            itemImage = item.GetSprite();
            var createImage = Instantiate(itemImage, new Vector2(Slot3.position.x, Slot3.position.y), Quaternion.identity);
            itemImage.transform.position = new Vector2(-190, -90);
            createImage.transform.SetParent(canvas.transform, false);
        }
        if (x == 3)
        {
            itemImage = item.GetSprite();
            var createImage = Instantiate(itemImage, new Vector2(Slot4.position.x, Slot4.position.y), Quaternion.identity);
            createImage.transform.position = new Vector2(-120, -90);
            createImage.transform.SetParent(canvas.transform, false);
        }
        if (x == 4)
        {
            itemImage = item.GetSprite();
            var createImage = Instantiate(itemImage, new Vector2(Slot5.position.x, 
            Slot5.position.y), Quaternion.identity);
            createImage.transform.position = new Vector2(-50, -90);
            createImage.transform.SetParent(canvas.transform, false);
        }
        x++;
    }
}

(I have only added the relevant bits of code btw)

    public class Inventory
{
    private List<Item> itemList;

    public Inventory()
    {
        itemList = new List<Item>();
        AddItem(new Item { itemType = Item.ItemType.Health, amount = 1 });
        AddItem(new Item { itemType = Item.ItemType.Shield, amount = 1 });
        Debug.Log(itemList.Count);
    }

    public void AddItem(Item item)
    {
        itemList.Add(item);
    }

    public List<Item> GetItemList()
    {
        return itemList;
    }
}

And the final bit -

   private void Awake()
    {
        inventory = new Inventory();
        uiInventory.SetInventory(inventory);
    }


    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Item")
        {
            if (collision.gameObject.name == "Health")
            {
                Destroy(gameObject);
                inventory.AddItem(new Item { itemType = Item.ItemType.Health, amount = 1 });
            }
        }
    }

}

I would be grateful. Thanks :)

Epik
  • 33
  • 3
  • 1
    https://learn.microsoft.com/en-us/visualstudio/debugger/debugging-absolute-beginners?view=vs-2019&tabs=csharp – mxmissile Jul 27 '21 at 15:18
  • My guess would be that the ItemAssets.Instance is null. But since you didn't post that class and I don't exactly know where line 22 is it's just a guess. – Paul Sinnema Jul 27 '21 at 18:01

0 Answers0