Давайте посмотрим на этот фрагмент кода.
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();
}
В вашем случае, stuff.Count == 2
, верно? Лес и тролль. Так что i
в вашем for
l oop будет повторяться по 0, 1
, что означает, что inv[i]
всегда будет деревом! Ты понял? Первый и второй элементы inv
- оба дерева, поэтому неудивительно, что в вашем инвентаре есть два слота для дерева.
Вот мое предложение, используйте foreach
:
int walker = 0; // which indicates the index of slot.
foreach (var item in stuff)
{
uiSlots[walker].GetChild(0).gameObject.GetComponent<Image>().sprite = Resources.Load<Sprite>("Sprites/" + item.Key) as Sprite;
uiSlots[walker].GetChild(1).GetComponent<Text>().text = item.Value.ToString();
walker++;
}
foreach
может повторять все виды коллекций. Процесс, в котором вы помещаете элементы в inv
в stuff
dict, также можно преобразовать в выражение foreach
, например:
foreach (var item in inv)
{
if (!stuff.ContainsKey(item))
{
stuff.Add(item, 1);
}
else
{
stuff[item]++;
}
}