如果采用寻找相同类型来存储可堆叠物品,而不是采用ID,那么会导致获取得HP时却增加了MP存量而不是获取HP。
同时如果采用StoreItem方法来直接存储可堆叠物品会导致一个对象拥有多个子对象,一个格子对象可能带着四五个子对象,而且这个现象是无穷叠加,捡到多少次消耗品,就会给那个格子添加多少个子对象。
利用类型来储存消耗品是不合适的,应该采用根据ID来寻找,这样精确的储存可以确保玩家获取到的不同的消耗品都可以正确的进入背包。
首先更改findtype方法为findId。
public SlotUI FindSameIdSlot(Item item)
{
int id = item.ID;
foreach(SlotUI slot in slotlist)
{
if(slot.transform.childCount != 0)
{
if(slot.GetItemId() == id)
{
if(slot.IsFull() != true)
{
return slot;
}
}
}
}
return null;
}
其次更改Slot内的方法。
public int GetItemId()
{
return transform.GetChild(0).GetComponent<ItemUI>().item.ID;
}
以及添加一个新的方法,来给获取得的相同消耗品增加存储量,而不是再次给储物槽提供一个新的子对象。
public void StockMore()
{
transform.GetChild(0).GetComponent<ItemUI>().number++;
}
最终玩家取得到的不同消耗品,会正确的堆叠。
SlotUI slot = FindSameIdSlot(item);
if(slot != null)
{
slot.StockMore();
return true;
}
else
{
slot = FindEmptySlot();
if(slot == null)
{
return false;
}
slot.StoreItem(item);
return true;
}