团结问题说我的转型孩子超出范围

时间:2019-05-15 17:28:24

标签: c# unity3d transform parent-child

我的总体目标是为游戏创建一个基本的库存系统,但最终我的问题是整个库存系统崩溃了,我没有想要的东西。

所以我删除了代码,但导致其他多个问题,我尝试替换代码,但导致了相同的问题。

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);
        }
    }
}

我希望结果能在库存系统中显示我的物品,但实际结果是整个库存系统无法正常工作并关闭。

1 个答案:

答案 0 :(得分:1)

您在DetectInventorySlots中有一个错字,导致了无限循环。您需要比较变量islots,而不是数字1slots

应该是:

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);
    }
}