NullReferenceException: Object reference not set to an instance of an object & You are trying to create a MonoBehaviour using the 'new' keyword.
I get this null reference with i click P (Adding item id 0 (Apple) to my inventory pointing to this line " if(itm.itemID == id)"
As well as in the "Item" Script i get an error "You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all UnityEngine.MonoBehaviour:.ctor()"
SCRIPT "GameDB" using System.Collections; using System.Collections.Generic; using UnityEngine;
public class GameDB : MonoBehaviour {
public List<Item> items = new List<Item>();
private void Start()
{
ItemDatabaseSetup();
}
private void ItemDatabaseSetup()
{
items.Add(new Item("Apple", "Gives Hunger", "Apple_Item", 0));
items.Add(new Item("Water", "Gives Thirst", "Water_Item", 1));
}
public Item GetItemByID(int id)
{
foreach(Item itm in items)
{
if(itm.itemID == id) ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ER1
{
return itm;
}
}
Debug.LogError("Cant find item by ID!");
return null;
}
}
PART OF INVENOTRY public void AddItem(int id) {
if (gameDB == null)
{
gameDB = GameObject.FindGameObjectWithTag("GameDB").GetComponent<GameDB>();
}
Item itemAdd = gameDB.GetItemByID(id);
for(int i = 0; i < slots.Count; i++)
{
if (slots[i].transform.childCount <= 0)
{
GameObject itemInstance = Instantiate(itemPrefab);
itemInstance.transform.SetParent(slots[i].transform);
itemInstance.transform.localPosition = Vector2.zero;
itemPrefab.GetComponent<Image>().sprite = itemAdd.itemSprite;
break;
}
}
}
}
"Item Script"
using System; using System.Collections; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;
[System.Serializable] public class Item : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {
public string itemName;
public string itemDescription;
public Sprite itemSprite;
public string spriteName;
public int itemID;
public Item(string name, string description, string spriteName, int id) ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ER2
{
itemName = name;
itemDescription = description;
itemSprite = Resources.Load<Sprite>("ItemIcons/" + spriteName);
itemID = id;
}
public Item()
{
}
private Transform startParent;
private CanvasGroup canvasGroup;
private void Start()
{
startParent = transform.parent;
canvasGroup = GetComponent<CanvasGroup>();
}
public void OnBeginDrag(IPointerEnterData eventData)
{
transform.position = eventData.position;
transform.SetParent(transform.parent.parent);
canvasGroup.blocksRaycasts = false;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position;
}
public void OnEndDrag(PointerEventData eventData)
{
transform.SetParent(startParent); // Reset Parent
transform.localPosition = Vector2.zero; //Reset Position
canvasGroup.blocksRaycasts = true;
}
void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
{
throw new NotImplementedException();
}
}
Your answer
Follow this Question
Related Questions
C# Having troubles with creating/referencing a random list. 1 Answer
How to change a public location,how to get a public variable 1 Answer
Need help with a code!! 0 Answers
Accesing specific int from inspector 2 Answers
Don't know how to convert a string value to add into a int dictionnary. 1 Answer