Hey,
I have been creating my Inventory system and I have come across a strange problem, whenever I take items from chests the element deactivates itself and when I try to activate it (via. button or in scene manager) it just stays frozen for couple of seconds and then work perfectly.
I have a couple of scripts working with this element - inventory works with items changing their parents - slots. There is also a script that uses for commands to check weight of the items and shows it on child of said element.
So I looked into this a bit more and I found out that this “overloading” happens when I move items to inventory via different way than drag and drop system that I have implemented. For example I use this code to move all items to inventory with a click of a button.
public void Take() {
inventory1.SetActive(true);
for (int i = 1; i <= 14; i++)
{
slot = GameObject.Find("Slot" + i);
if (slot.transform.childCount > 0)
{
while (!transfer)
{
playerslot = GameObject.Find("Slot" +inventorynumber + "." + y);
if (playerslot.transform.childCount != 0)
{
if (y == 21)
{
y = 1;
inventorynumber++;
if(inventorynumber > 4)
{
inventorynumber = 1;
}
switch (inventorynumber)
{
case 1:
inventory1.SetActive(true);
inventorynumber = 1;
y = 1;
break;
case 2:
inventory2.SetActive(true);
inventorynumber = 2;
y = 1;
break;
case 3:
inventory3.SetActive(true);
inventorynumber = 3;
y = 1;
break;
case 4:
inventory4.SetActive(true);
inventorynumber = 4;
y = 1;
break;
}
}
else
{
y++;
}
}
else
{
transfer = true;
}
}
transfer = false;
itemininventory = slot.transform.GetChild(0).gameObject;
print(itemininventory);
predmet = Instantiate(Resources.Load(itemininventory.name), transform.position,
Quaternion.Euler(0f, 0f, 0f)) as GameObject;
predmet.transform.SetParent(playerslot.gameObject.transform, false);
predmet.name = itemininventory.name;
Destroy(itemininventory);
if (y == 21)
{
y = 1;
inventorynumber++;
if (inventorynumber > 4)
{
inventorynumber = 1;
}
switch (inventorynumber)
{
case 1:
inventory1.SetActive(true);
inventorynumber = 1;
y = 1;
break;
case 2:
inventory2.SetActive(true);
inventorynumber = 2;
y = 1;
break;
case 3:
inventory3.SetActive(true);
inventorynumber = 3;
y = 1;
break;
case 4:
inventory4.SetActive(true);
inventorynumber = 4;
y = 1;
break;
}
}
else
{
y++;
}
}
}
}
I have found a solution to this, what I was doing is that I was destroying and then creating UI element somewhere else, this caused my UI to freeze. I fixed it to simply change parent of desired UI elemnt.