C# Unity库存堆垛功能不正常

C# Unity库存堆垛功能不正常,c#,unity3d,C#,Unity3d,我是Unity的初学者 我试图建立一个库存系统,如果你有4个木材,它不会占用4个库存空间,只有1个有数字4 当我正常得到4块木头,打开清单时,它工作正常,带有木头图标和数字4。当我使用inspector添加到公共列表时,它只是复制了第一个条目。这就是我要说的。代码如下: public void OpenInventory() { inventoryPanel.SetActive(true); Dictionary<string, int> stuff = new D

我是Unity的初学者

我试图建立一个库存系统,如果你有4个木材,它不会占用4个库存空间,只有1个有数字4

当我正常得到4块木头,打开清单时,它工作正常,带有木头图标和数字4。当我使用inspector添加到公共列表时,它只是复制了第一个条目。这就是我要说的。代码如下:

public void OpenInventory()
{

    inventoryPanel.SetActive(true);
    Dictionary<string, int> stuff = new Dictionary<string, int>();
    stuff = new Dictionary<string, int>();
    //updating inventory slots on screen
    for (int i = 0; i < inv.Count; i++)
    {
        if (!stuff.ContainsKey(inv[i]))
        {
            stuff.Add(inv[i], 1);  
        }
        else
        {
            stuff[inv[i]] = stuff[inv[i]] += 1;
        }

    }

    for (int i = 0; i < stuff.Count; i++)
    {
        uiSlots[i].GetChild(0).gameObject.GetComponent<Image>().sprite = Resources.Load<Sprite>("Sprites/" + inv[i]) as Sprite;

        uiSlots[i].GetChild(1).GetComponent<Text>().text = stuff[inv[i]].ToString();

    }


}
public void OpenInventory()
{
inventoryPanel.SetActive(真);
Dictionary stuff=新字典();
stuff=新字典();
//更新屏幕上的库存插槽
对于(整数i=0;i
在我进行更改(工作正常)之前:

现在,当我在inspector中更改库存并刷新库存屏幕时:


我真的不知道发生了什么,特别是因为如果我再做同样的事情,一切都不会改变

让我们看一下这个代码片段

for(inti=0;i
在您的例子中,
stuff.Count==2
,对吗?木头和巨魔。因此,您的
for
循环中的
i
将迭代
0,1
,这意味着
inv[i]
将始终是木头!明白了吗?
inv
的第一个和第二个元素都是木头,所以在你的库存中有两个木头槽就不足为奇了

以下是我的建议,请使用
foreach

int walker=0;//表示插槽的索引。
foreach(stuff中的var项)
{
uiSlots[walker].GetChild(0.gameObject.GetComponent().sprite=Resources.Load(“Sprites/”+item.Key)作为精灵;
UISlot[walker].GetChild(1.GetComponent().text=item.Value.ToString();
沃克++;
}
foreach
可以迭代所有类型的集合。将
inv
中的项目放入
stuff
dict的过程也可以转换为
foreach
表达式,如:

foreach(存货中的var项目)
{
如果(!stuff.ContainsKey(项目))
{
添加(第1项);
}
其他的
{
填充[项目]+;
}
}

你应该得到更多的声誉!谢谢你教我更好的编码礼仪并解决了我的问题!:D