조금 더 나의 본질이 뭔가, 뭐가 하고 싶은가를 고민하다가 새 게임을 시작.
이번 게임은 수집, 성장 요소가 있는 게임이기 때문에 인벤토리가 필요해서 하나 만들었다.
간만에 풀코드.
InventorySystem.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Kpaper;
namespace Kpaper
{
public class InventorySystem : MonoBehaviour
{
#region Inventory
// 인벤토리 시스템 기초 구조만 담긴 코드
// _itemID 를 itemTable 에서 찾아서 정보를 표시하거나 하는 부분은 별도로 구현해야 한다.
// 아이템의 아이디 갯수 itemID, count
public Dictionary items = new Dictionary();
// items 에 입력한 아이템 ID와 카운트를 더해준다. (add 다. assign 아님)
public void setAddItem(int _itemID, int _count)
{
// 아이템이 목록에 없다면 넣어준다.(초기 갯수는 0개)
if (items.ContainsKey(_itemID) == false)
{
items.Add(_itemID, 0);
}
// 아이템 수량 증가 적용
items[_itemID] += _count;
if (Debug.isDebugBuild)
Debug.Log(string.Format("{0} {1}을 {2} 개", "아이템 삽입", _itemID, _count));
}
// items 에서 해당 아이템 키가 있는지 확인하고 있으면 카운트 만큼 빼준다. 카운트가 0인 경우에는 아이템 키를 제거해준다.
public void setRemoveItem(int _itemID, int _count)
{
// 아이템이 목록에 없다면 아무것도 하지 않는다.
if (items.ContainsKey(_itemID) == false)
{
if (Debug.isDebugBuild)
Debug.Log("아이템이 목록에 없습니다.");
return;
}
// 아이템 수량 감소 적용
items[_itemID] -= _count;
// 아이템 수를 감소 시켰더니 0개 이하이면 아이템을 사전 목록에서 제거한다.
if (items[_itemID] <= 0)
items.Remove(_itemID);
if (Debug.isDebugBuild)
Debug.Log(string.Format("{0} {1}을 {2} 개", "아이템 제거", _itemID, _count));
}
// 보유한 아이템 목록
public List keys = new List();
// 아이템 목록 새로 고침
public void setRefreshInventory()
{
if (Debug.isDebugBuild)
Debug.Log(items.Count + " 개의 아이템이 있습니다.");
// 딕셔너리의 키 묶음을 들고와서 Keys 리스트를 만든다.
keys = new List(items.Keys);
// Keys 리스트를 기준으로 아이템 ID와 수량을 출력한다.
for (int i = 0; i < keys.Count; i++)
{
int _itemID = keys[i];
int _itemCount = items[_itemID];
if (Debug.isDebugBuild)
Debug.Log("아이템 키 : " + _itemID + " 아이템 수량 : " + _itemCount); // 이 부분을 리스트로 만들어 쓰던가 하면 관리하기 편하다.
}
}
// 아이템 아이디를 입력하면 해당 아이템의 보유 수량을 리턴한다. 아이템을 찾을 수 없으면 0을 보낸다.
public int getItemCountByItemIndex(int _itemID)
{
if (items.ContainsKey(_itemID))
{
return items[_itemID];
}
else
{
Debug.Log(string.Format("인벤토리 안에서 찾을 수 없는 아이템ID {0} 를 요청했습니다.",_itemID));
return 0;
}
}
#endregion
#region MonoBehavior
private void Start()
{
// 시연
// 임의로 1이라는 itemID를 가진 아이템을 10개 넣고 5개씩 2번 빼서 0으로 만들어 본다.
// 인벤토리 리프레시
setRefreshInventory();
// 아이템 1을 10개 넣고
setAddItem(1, 10);
// 인벤토리 리프레시
setRefreshInventory();
// 아이템 갯수 찾기 테스트
Debug.Log(getItemCountByItemIndex(2));
// 1을 5개 제거
setRemoveItem(1, 5);
// 인벤토리 리프레시
setRefreshInventory();
// 1을 5개 제거
setRemoveItem(1, 5);
// 인벤토리 리프레시
setRefreshInventory();
}
#endregion
}
}
댓글 없음:
댓글 쓰기