首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Inventory System:项目堆栈

Unity Inventory System:项目堆栈
EN

Stack Overflow用户
提问于 2019-09-20 18:17:07
回答 2查看 307关注 0票数 0

嗨,伙计们,我想知道我的代码有什么问题。它可以使用堆栈添加第一项,但仅限于使用堆栈添加第二项。请帮帮忙

代码语言:javascript
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-09-20 18:43:58

如果我正确理解了你的问题,你不能将一个项目添加到现有的堆栈,这可能是由于这个If条件:

代码语言:javascript
复制
    if (inventoryItems[i].item == itemToAdd )

如果这样做有效,您需要覆盖Item类中的"Equals“和"GetHashCode”方法,因为默认的"==“运算符只检查引用是否相等

票数 0
EN

Stack Overflow用户

发布于 2019-09-21 06:02:50

有很多错误。isStackable检查得太晚了。添加到堆栈中的项目只有一个。

代码语言:javascript
复制
if (inventoryItems[i].item == itemToAdd ) {}
else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize) {}

否则永远不会发生

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58026400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档