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