【问题标题】:Unity Problem saying my Transformation Child is out of boundUnity 问题说我的 Transformation Child 超出范围
【发布时间】:2019-05-15 17:28:23
【问题描述】:

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

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

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

我预计结果会在库存系统中显示我的商品,但实际结果是整个库存系统无法正常工作并关闭。

【问题讨论】:

  • 请将 Update 中的 SetActive 调用移到 if (Input.GetKeyDown) 之后的 { },您现在的做法完全相同,但成本更高。不知道如何解决您的问题

标签: c# unity3d transform parent-child


【解决方案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);
    }
}

【讨论】:

  • 很好看,如果有人想知道的话,很难看出它的“i”与“1”
  • @zambari 谢谢。我编辑了我的答案以表明差异。
猜你喜欢
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多