카테고리 없음
인벤토리 개수제한
이더23
2025. 1. 14. 19:58
인벤토리 개수를 각 타입당 60개로 제한하기 위해서 처음에는 생각한방법이 아이템을 획들할때마다 for문을 돌려서 해당 아이템의 타입이 개수가 60개를 넘기면 아이템을 못먹게 만들려고 했는데 이렇게 코드를 작성할려니 너무 for문이 많이 돌거 같아서 찾은 방법이 각 타입당 정수형 변수 하나씩을 만들고, 해당 타입의 아이템이 늘어날떄마다 변수를 하나씩 더해줬다.
public int equipmentCount;
public int consumptionCount;
public int miscCount;
private void CountItem(ItemType type)
{
if (type == ItemType.Consumption)
consumptionCount++;
else if (type == ItemType.Misc)
miscCount++;
else
equipmentCount++;
}
public bool CheckInventoryFulled(ItemType type)
{
if (type == ItemType.Consumption)
return consumptionCount >= 60;
else if (type == ItemType.Misc)
return miscCount >= 60;
else
return equipmentCount >= 60;
}
이렇게 만든 후에 아이템 추가하는 로직에 CountItem을 추가해주면 해당 아이템의 타입에 맞게 변수의 값이 증가할 것이다.
그리고 CheckInventoryFulled함수는 아이템을 개수가 60개를 넘는지 안넘는지 확인하는 로직이다.
퀘스트
퀘스트 보상으로 장비아이템주는데 이때는 CheckInventoryFulled함수가 false이면 인벤토리 꽉찼다는 판넬 보내고 return을 보내면 된다.
for (int i = 0; i < itemList.Count; i++)
{
if (ItemManager.Instance.CheckInventoryFulled(DataManager.Instance.Item.GetItemData(itemList[i]).itemType))
{
UIManager.Instance.Show<UIInventoryFull>().Initialize(DataManager.Instance.Item.GetItemData(itemList[i]).itemType);
return;
}
}
던전보상
던전보상으로 어떤 아이템을 줄지는 모르지만 보상의개수만큼 변수에 더해준다음에 해당 타입의 변수에 값을 더했을때 60이 넘으면 인벤토리제한을 넘는거기 때문에 인벤토리 꽉찼다는 판넬을 보내면된다.
int equipmentCount = ItemManager.Instance.equipmentCount;
int consumptionCount = ItemManager.Instance.consumptionCount;
int miscCount = ItemManager.Instance.miscCount;
for (int i = 0; i < itemList.Count; i++)
{
ItemType type = DataManager.Instance.Item.GetItemData(itemList[i]).itemType;
if (type == ItemType.Consumption)
{
consumptionCount++;
if (consumptionCount > 60)
{
UIManager.Instance.Show<UIInventoryFull>().Initialize(type);
Hide();
return;
}
}
else if (type == ItemType.Misc)
{
miscCount++;
if (miscCount > 60)
{
UIManager.Instance.Show<UIInventoryFull>().Initialize(type);
Hide();
return;
}
}
else
{
equipmentCount++;
if (equipmentCount > 60)
{
UIManager.Instance.Show<UIInventoryFull>().Initialize(type);
Hide();
return;
}
}
}