我的总体目标是为游戏创建一个基本的库存系统,但最终我的问题是整个库存系统崩溃了,我没有想要的东西。
所以我删除了代码,但导致其他多个问题,我尝试替换代码,但导致了相同的问题。
public class Inventory : MonoBehaviour
{
public GameObject inventory;
public GameObject slotHolder;
private bool inventoryEnabled;
private int slots;
private Transform[] slot;
private bool itemAdded;
private GameObject itemPickedUp;
public void Start()
{
// slots being detected
slots = slotHolder.transform.childCount;
slot = new Transform[slots];
DetectInventorySlots();
}
public void Update()
{
if (Input.GetKeyDown(KeyCode.I))
{
inventoryEnabled = !inventoryEnabled;
}
if (inventoryEnabled)
inventory.SetActive(true);
else
inventory.SetActive(false);
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.GetComponent<Item>())
{
itemPickedUp = other.gameObject;
Additem(itemPickedUp);
}
}
public void Additem(GameObject item)
{
for(int i = 0; 1 < slots; i ++)
{
if(slot[i].GetComponent<Slots>().empty)
{
slot[i].GetComponent<Slots>().item = itemPickedUp;
slot[i].GetComponent<Slots>().itemIcon = itemPickedUp.GetComponent<Item>().icon;
itemAdded = true;
}
}
}
public void DetectInventorySlots()
{
for (int i = 0; 1 < slots; i++)
{
slot[i] = slotHolder.transform.GetChild(i);
}
}
}
我希望结果能在库存系统中显示我的物品,但实际结果是整个库存系统无法正常工作并关闭。
答案 0 :(得分:1)
您在DetectInventorySlots
中有一个错字,导致了无限循环。您需要比较变量i
和slots
,而不是数字1
与slots
。
应该是:
public void DetectInventorySlots()
{
for (int i = 0; i < slots; i++)
{
slot[i] = slotHolder.transform.GetChild(i);
}
}
不是:
public void DetectInventorySlots()
{
for (int i = 0; 1 < slots; i++)
{
slot[i] = slotHolder.transform.GetChild(i);
}
}