【问题标题】:Unity Inventory System: Item StackUnity 库存系统:物品堆叠
【发布时间】:2019-09-20 10:17:06
【问题描述】:

大家好,我只是想知道我的代码是否有问题。它可以添加带有堆栈的第一项,但它停止添加带有堆栈的第二项。请帮忙

void AddItems ()
{
    Item itemToAdd = itemDatabase.items[0];

    if (IsInInventory(itemToAdd))
    {
        for (int i = 0; i < inventoryItems.Count; i++)
        {
            if (inventoryItems[i].item == itemToAdd )
            {
                if (inventoryItems[i].item.isStackable)
                {
                    if (inventoryItems[i].stackSize != inventoryItems[i].item.stackSize)
                    {
                        inventoryItems[i].stackSize++;
                        break;
                    }

                }
            }
            else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize)
            {
                AddItem(itemToAdd);
            }
        }
    }
    else
    {
        AddItem(itemToAdd);
    }
}

【问题讨论】:

    标签: c# unity3d stack inventory


    【解决方案1】:

    如果我正确理解了您的问题,即您无法将项目添加到现有堆栈中,这可能是由于以下 if 条件:

        if (inventoryItems[i].item == itemToAdd )
    

    如果这应该有效,您需要在 Item 类中重写“Equals”和“GetHashCode”方法,因为默认的“==”运算符只检查引用是否相等

    【讨论】:

    • 我可以将项目添加到现有的项目堆栈中,但只要该项目堆栈已满,它就不会添加新项目
    【解决方案2】:

    许多错误。 isStackable 检查到晚。添加到堆栈的项目只有一个。

    if (inventoryItems[i].item == itemToAdd ) {}
    else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize) {}
    

    永远不会发生

    void AddItems () {
        Item itemToAdd = itemDatabase.items[0];
        if (inventoryItems[i].item.isStackable && IsInInventory(itemToAdd)) {
            for (int i = 0; i < inventoryItems.Count; i++) {
                if (inventoryItems[i].item == itemToAdd ) {
                    if (inventoryItems[i].stackSize+itemToAdd.stackSize <= inventoryItems[i].item.stackSize) {
                        inventoryItems[i].stackSize += itemToAdd.stackSize;
                    } else {
                        itemToAdd.stackSize -= inventoryItems[i].item.stackSize-inventoryItems[i].stackSize;
                        inventoryItems[i].stackSize = inventoryItems[i].item.stackSize;
                        AddItem(itemToAdd);
                    }
                    break;
                }
            }
        } else {
            AddItem(itemToAdd);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2018-07-16
      • 2018-03-13
      • 1970-01-01
      相关资源
      最近更新 更多