【问题标题】:Inventory UI acting strange in updating amounts库存 UI 在更新数量时表现得很奇怪
【发布时间】:2020-12-04 10:43:23
【问题描述】:

所以我有一个项目类、一个库存类和 UIController 脚本。当玩家越过场地上的物品时,玩家应该将该物品添加到库存中,如果他/她有该物品,则应该将数量增加一。

我遇到的问题是 UI 上的数字是随机的,有时项目会添加数量,而有时它们只是使用新插槽。我已经添加了上面提到的三个脚本。

public Item() 
{
    amount = 0;
}

public int GetItemAmount() 
{
    return amount;
}

public void IncreaseAmount(int amt) 
{
    amount += amt;
}    

public void SpawnItem() 
{
    Instantiate(prefab);
}
public Inventory() 
{
    inventory = new List<Item>();
}
    
    
// Add item to inventory. if item is already in inventory, increase amount.
public void AddItem(Item item) 
{    
    if (inventory.Count == 0)
    {
        inventory.Add(item);
    }
    else
    {
        for (int i = 0; i < GetInventory().Count; i++)
        {
            if (this.inventory[i] == item)
            {
                inventory[i].IncreaseAmount(1);
                break;
            }
            else
            {    
                 inventory.Add(item);                        
            }
            break;
         }  
     }
}
void Start()
{
    player = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
    inventoryItems = CreateInventoryItemUI(itemSlotImage);
}

private void Update()
{
    var playerItems = player.inventory.GetInventory();

    for (int i = 0; i <= playerItems.Count ; i++)
    {
        //Debug.Log("The value of i is : " + i);
        if (playerItems[i] != null)
        {
            inventoryItems[i].GetComponentInChildren<Image>().sprite = playerItems[i].imageIcon;
            var amountUI = inventoryItems[i].transform.Find("ItemSlotAmount").GetComponent<Text>();
            amountUI.gameObject.SetActive(true);
            amountUI.text = playerItems[i].GetItemAmount().ToString();
            Debug.Log("The items being added will be: " + amountUI.text);
            inventoryItems[i].gameObject.SetActive(true);
        }
    }
}

我想我只是另一双眼睛。我调试并检查了增加数量方法的参考,它只在库存脚本中使用。

任何想法都会非常有帮助。

【问题讨论】:

    标签: c# unity3d user-interface


    【解决方案1】:

    您正在检查添加的 Item 是否与列表中的一个对象完全相同,就像在同一个引用中一样。我假设这可能不是您想要的,否则请发布调用 AddItem 的代码部分。

    两个建议:

    首先,给 Item 添加一个 Id 属性,然后比较要添加的项目是否具有相同的 Id,而不是比较引用。

    其次,如果您使用字典而不是列表来存储项目,这可能会更清洁和更有效。试试看!

    【讨论】:

    • 我将所有内容都更改为字典,这样可以更轻松地跟踪内容。问题现已解决。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2020-05-03
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多