Question by
Applefruits · Mar 20, 2016 at 07:28 PM ·
object reference
Object Reference not Set to an Instance of an Object in C#
Trying to make a collectable , to go from the collectable object to my inventory .
Inventory Script
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class Inventory : MonoBehaviour {
ItemDataBase database;
GameObject inventoryPanel;
GameObject slotPanel;
int slotAmount;
public GameObject inventorySlot;
public GameObject inventoryItem;
public List<Item> items = new List<Item>();
public List<GameObject> slots = new List<GameObject>();
void Start()
{
database = GetComponent<ItemDataBase>();
slotAmount = 20;
inventoryPanel = GameObject.Find("InventoryPanel");
slotPanel = inventoryPanel.transform.FindChild("SlotPanel").gameObject;
for(int i = 0; i < slotAmount; i++)
{
items.Add(new Item());
slots.Add(Instantiate(inventorySlot));
slots[i].GetComponent<Slot>().id = i;
slots[i].transform.SetParent(slotPanel.transform);
}
AddItem(0);
AddItem(0);
AddItem(1);
AddItem(1);
AddItem(1);
}
public void AddItem(int id)
{
Item itemToAdd = database.FetchItemByID(id);
if (itemToAdd.Stackable && CheckItemInventory(itemToAdd))
{
for (int i = 0; i < items.Count; i++)
{
if (items[i].ID == id)
{
ItemData data = slots[i].transform.GetChild(0).GetComponent<ItemData>();
data.amount++;
data.transform.GetChild(0).GetComponent<Text>().text = data.amount.ToString();
break;
}
}
}
else {
for (int i = 0; i < items.Count; i++)
{
if (items[i].ID == -1)
{
items[i] = itemToAdd;
GameObject itemObj = Instantiate(inventoryItem);
itemObj.GetComponent<ItemData>().item = itemToAdd;
itemObj.GetComponent<ItemData>().amount = 1;
itemObj.GetComponent<ItemData>().slot = i;
itemObj.transform.SetParent(slots[i].transform);
itemObj.transform.position = Vector2.zero;
itemObj.GetComponent<Image>().sprite = itemToAdd.Sprite;
itemObj.name = itemToAdd.Title;
break;
}
}
}
}
bool CheckItemInventory(Item item)
{
for(int i = 0; i < items.Count; i++)
{
if (items[i].ID == item.ID)
return true;
}
return false;
}
}
and Collectable script
using UnityEngine;
using System.Collections;
public class Collectable : MonoBehaviour {
public Inventory TheItem;
public int ItemID;
// Use this for initialization
void Start () {
TheItem = GameObject.Find("Inventory").GetComponent<Inventory>();
}
// Update is called once per frame
void Update () {
}
void OnTriggerStay()
{
if (Input.GetKeyDown(KeyCode.E))
{
TheItem.AddItem(ItemID);
}
}
}
Not sure what I'm doing wrong !
Comment
Your answer
Follow this Question
Related Questions
Trying to track the BoxColliders of 2 Different Sets of Instantiated GameObjects 1 Answer
Object Reference Error 2 Answers
Object reference not set to instance of an object? 1 Answer
Unable to create a reference to an instantiated object and alter it? 1 Answer
Object reference is required to access non-static member? 1 Answer