C# 统一问题说我的孩子出界了

C# 统一问题说我的孩子出界了,c#,unity3d,transform,parent-child,C#,Unity3d,Transform,Parent Child,我的总体目标是为我的游戏创建一个基本的库存系统,但我的问题最终导致我的整个库存系统崩溃,没有我想要的任何东西 因此,我删除了代码,但它导致了多个其他问题。我尝试替换代码,但它导致了相同的问题 public class Inventory : MonoBehaviour { public GameObject inventory; public GameObject slotHolder; private bool inventoryEnabled; pri

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

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

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);
        }
    }
}
公共类清单:单一行为
{    
公共游戏对象目录;
公共游戏者;
私有布尔库存启用;
专用int插槽;
专用转换[]槽;
增加了私有布尔项;
私有游戏对象项pickedup;
公开作废开始()
{
//正在检测的插槽
slots=slotHolder.transform.childCount;
slot=新变换[slot];
检测Ventoryslots();
}
公共无效更新()
{
if(Input.GetKeyDown(KeyCode.I))
{
inventoryEnabled=!inventoryEnabled;
}
如果(已启用资源清册)
inventory.SetActive(true);
其他的
inventory.SetActive(false);
}    
公共空对撞机(对撞机其他)
{
if(other.gameObject.GetComponent())
{
itemPickedUp=other.gameObject;
附加项(项目选择);
}
}
公共无效附加项(游戏对象项)
{
对于(int 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()
{
对于(int i=0;i
不是:

public void DetectInventorySlots()
{
对于(int i=0;1
请将更新中的SetActive调用移到if(Input.GetKeyDown)之后的{}处,您现在这样做的方式完全相同,但成本更高。不知道如何解决你的问题被发现了,如果有人想知道的话,很难看出是“我”还是“1”@zambari谢谢。我编辑了我的答案,以表明不同之处。
public void DetectInventorySlots()
{
    for (int i = 0; 1 < slots; i++)
    {
        slot[i] = slotHolder.transform.GetChild(i);
    }
}