【发布时间】: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