for循环停止在第一个元素/某个东西需要在一个元素中循环继续

时间:2017-02-14 03:54:46

标签: c# for-loop unity3d inventory

我有一个精心设计的菜单脚本,根据您在游戏菜单中点击的内容,它会遍历广告资源的插槽,并查看您的广告资源中是否有某个特定对象。

但它没有按计划运作。

如果正在搜索的对象位于数组的第一个元素中,则for循环正在进行,因为一切都可以正常工作。 视觉指南:http://imgur.com/e1cr8bX

如果库存数组中所有正在搜索的库中的插槽都填充了其他对象,那么一切都会正常工作。 视觉指南:http://imgur.com/aVNw8JE

但是如果导致被搜索对象的其中一个槽中没有对象,那么循环似乎停止并且没有任何反应。 视觉指南:http://imgur.com/qYO3mPJ

如果插槽返回null,我已尝试添加if语句来执行某些操作。像Debug.Log和j ++这样的东西。但是什么也没做。

这是脚本:

void Update () {
    //Loop through inventory slots.
    for (int j = 0; j < itemstacks.Length; j++)
    {            
        if (playerInventory.itemStacks[j].stackSize == 0)
        {
            playerInventory.itemStacks[j] = null;
        }

        //Loop through shop slots.
        for (int i = 0; i < slots.Length; i++)
        {
            if (IsMouseOverSlot(i))
            {
                if (CraftMenuINVScript.CraftMenuStacks[i] != null)
                {
                    if (CraftMenuINVScript.CraftMenuStacks[i].item.name == "WalkWay")
                    {
                        if (itemstacks[j].item.name == "Log")
                        {
                            if (playerInventory.itemStacks[j].stackSize >= 2)
                            {
                                if (Input.GetMouseButtonDown(0))
                                {
                                     Debug.Log("Craft");
                                     playerInventory.AddItem(CraftMenuINVScript.CraftMenuStacks[i].item.name, 1);
                                     playerInventory.itemStacks[j].stackSize -= 2;
                                }
                            }  
                        }
                        else if (itemstacks[j].item.name == null)
                        {
                            Debug.Log("yo");
                        }
                    }
                }
                else
                {
                    Debug.Log("No item");
                }
            }
        }           
        RenderShopSlots();
    }
}

我确定自己是个白痴,脸上有些东西正好盯着我,但我似乎无法解决这个问题。我可以想到解决方法,比如必须将库存对象放在某些位置以便事情发生。但我宁愿让它以这种方式工作。

此外,我现在只使用了几个月的c#所以如果我犯了一些愚蠢的noobie错误,请不要烧得太厉害。

感谢您的帮助。

0 个答案:

没有答案