- Home /
Destroying childs and Instantiate [C#]
Hey everybody ! I'm making a RPG and i have a problem with my inventory : When i open the inventory menu (there is two sub_menu : items and resssources, and a window where we can see items and ressources properties), the item menu is open with all items and all work. when i go to the ressources menu a method delete items that's for again. The ressource menu work too and when i go to the item menu, the same method delete ressources.
But now, when we click on a item to see his properties, this error appear : MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
I check the instantiated items, nothing is missing...
These are the scripts :
Instantiating Items (it is the same for ressources):
GameObject defaultItem = new GameObject();
i++;
defaultItem = (GameObject)Instantiate(emptyItem, new Vector3(0, 0, 0), Quaternion.identity);
BaseItems it = defaultItem.AddComponent<BaseItems>() as BaseItems;
it.AddItem(bI);
defaultItem.transform.parent = ITEM_Slots[i].transform;
defaultItem.transform.localPosition = new Vector3(0, 1, 0);
ITEM_Slots[i].GetComponent<Button>().onClick.AddListener(() => DisplayInventoryInfos(defaultItem.GetComponent<BaseItems>(), null));
defaultItem.GetComponent<Image>().sprite = defaultItem.GetComponent<BaseItems>().ITEM_Image;
defaultItem.GetComponent<RectTransform>().localPosition = new Vector3(0, 0, 0);
defaultItem.GetComponent<RectTransform>().sizeDelta = new Vector2(16,16);
inventoryItemChildsList.Add(defaultItem);
defaultItem.name = defaultItem.GetComponent<BaseItems>().ITEM_Name;
the scipt to delete items and ressources :
public void DestroyInventoryChild(List<GameObject> childs)
{
foreach (GameObject child in childs)
{
Destroy(child);
}
}
And the script to show properties :
public void DisplayInventoryInfos(BaseItems bI, BaseRessources bR)
{
if(bI != null)
{
INFO_Name.GetComponent<Text>().text = bI.ITEM_Name;
INFO_Image.GetComponent<Image>().sprite = bI.ITEM_Image;
INFO_Level.GetComponent<Text>().text = bI.ITEM_Level.ToString();
if(bI.ITEM_Type == ITEM_TYPE.ARMOR)
{
INFO_Type.GetComponent<Text>().text = bI.ARMOR_Type.ToString();
}
else if(bI.ITEM_Type == ITEM_TYPE.WEAPON)
{
INFO_Type.GetComponent<Text>().text = bI.WEAPON_Type.ToString();
}
int j = 0;
foreach(ItemStat iS in bI.ITEM_STATS)
{
INFO_Effects[j].GetComponent<Text>().text = iS.STAT_Affected.ToString() + " " + iS.value.ToString();
j++;
}
}
else if(bR != null)
{
INFO_Name.GetComponent<Text>().text = bR.RESSOURCE_Name;
INFO_Image.GetComponent<Image>().sprite = bR.RESSOURCE_Image;
INFO_Level.GetComponent<Text>().text = bR.RESSOURCE_Level.ToString();
INFO_Type.GetComponent<Text>().text = bR.RESSOURCE.ToString();
INFO_Effects[0].GetComponent<Text>().text = "Ressource.";
}
}
Thank you !
Bye, xyHeat
Your answer
Follow this Question
Related Questions
References to GameObject become null 1 Answer
Trouble with destroying an instantiated prefab 2 Answers
Store Game Object Into List For Later Reinstantiation? 0 Answers
Instantiated GameObject gets spawned as a child 2 Answers
using Contains(gameObject) to find and destroy a gameObject from a list 2 Answers