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 :)