Unity库存系统:项目堆栈

时间:2019-09-20 10:17:06

标签: c# unity3d stack inventory

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

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);
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

如果这行得通,则需要在Item类中覆盖“ Equals”和“ GetHashCode”方法,因为默认的“ ==”运算符仅检查引用是否相等

答案 1 :(得分:0)

许多错误。 isStackable检查到很晚。除了一堆物品之外。

drwxr-xr-x 2 root root   4096 Sep 20 21:29 pyodbc-4.0.27.dist-info
-rwxr-xr-x 1 root root 658704 Sep 20 21:29 pyodbc.cpython-36m-x86_64-linux-gnu.so

否则永远不会发生

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