Я использую 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);
}
}
}
Спасибо всем, кто готов мне помочь!