Система Hotbar не меняет местами должным образом - C#, Unity - PullRequest
0 голосов
/ 10 апреля 2020

Я использую C# и Unity для создания 2D-игры. Я сейчас работаю над инвентарем. Таким образом, основной инвентарь работает нормально, а панель горячих клавиш работает по большей части, за исключением случаев, когда вы меняете два элемента. Это прекрасно работает в основном инвентаре, но не на горячей панели.

На панели быстрого доступа отображается первый ряд инвентаря, поэтому он должен отражать то, что происходит в главном инвентаре. Проблема с заменой заключается в том, что вместо двух объектов, которые меняются местами, один из предметов, которые вы меняете, появляется в обоих слотах, а это не то, что происходит в основном инвентаре.

Мне кажется, что-то не так с время, однако оно должно обнаружить изменение и исправить его в миллисекундах, поэтому я подумал, что это может быть что-то не так с тем, как работает ItemData, но я получил его, чтобы напечатать все его данные, и кажется, что к элементу прикреплены правильные данные .

Я работал над этой конкретной проблемой c в течение нескольких месяцев, поэтому я подумал, что пришло время получить какую-то помощь извне, потому что я, к сожалению, не могу решить ее самостоятельно.

I здесь я добавлю биты кода, но если вы хотите больше, просто go к моей вставке здесь .

Функция обновления панели быстрого доступа (вызывается при обновлении):

public void HotBarUpdate()
    {
        for (int i = 0; i < 4; i++)
        {
            if (okCheckHotbar)
            {
                print(i);
                int CurrentItemID;
                CurrentItemID = invItemScript.items[i].ID;
                if (CurrentItemID != -1 && items[i].ID == -1) //checks if there is an item in slot and needs to add to hotbar
                {
                    AddItem(invItemScript.items[i].ID, i, invItemScript.slots[i].transform.GetChild(0).GetComponent<ItemData>().amount); print("adding");
                }
                if (CurrentItemID == -1 && items[i].ID != -1) //checks if there is no item in slot and needs to remove from hotbar
                {
                    RemoveItem(i, slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount); print("remove");
                }
                if (items[i].ID != CurrentItemID && items[i].ID != -1 && invItemScript.items[i].ID != -1) //checks if it needs to replace something
                {
                    DeleteAllReplace();
                    break;
                }

                if (items[i].ID == CurrentItemID && CurrentItemID != -1)
                {
                    try
                    {
                        if (invItemScript.slots[i].transform.GetChild(0).GetComponent<ItemData>().amount < slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount)
                        {
                            print("take away");
                            int amountTakeAway = slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount - invItemScript.slots[i].transform.GetChild(0).GetComponent<ItemData>().amount;
                            RemoveItem(i, amountTakeAway);
                        }
                    }
                    catch { }
                    try
                    {
                        if (invItemScript.slots[i].transform.GetChild(0).GetComponent<ItemData>().amount > slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount)
                        {
                            print("add");
                            int amountAdd = invItemScript.slots[i].transform.GetChild(0).GetComponent<ItemData>().amount - slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount;
                            AddItem(items[i].ID, i, amountAdd);
                        }
                    }
                    catch { }
                }
            }
        }
    }

Функция DeleteAllReplace:

public void DeleteAllReplace()
    {
        for(int i = 3; i > -1; i--)
        {
            print("Im Replacing Things!");
            if (items[i].ID != -1)
            {
                RemoveItem(i, slots[i].transform.GetChild(0).GetComponent<HotbarItemData>().amount);
            }
        }
    }

Спасибо всем, кто готов мне помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...