우선 프리팹을 Resources 폴더에 넣어서, 아이템 ID를 통해 생성하는 것으로 하자.
최근 유니티는 큰 게임 개발에서 Addressable Asset System인가로 Resource 매니저를 대신한다는데, 게임이 그렇게 커질 것 같지는 않으므로 작게 들어가겠다.
public void DropItemToField(int id)
{
//ID 받아와서 필드 내에 prefab 드롭함
if(id == 0)
{
Debug.Log("그런 아이템은 없다.");
return;
}
else
{
string itemPrefabFile = $"{itemPrefabPath}{id.ToString()}";
GameObject itemPrefab = Resources.Load(itemPrefabFile) as GameObject;
if(itemPrefab != null)
{
Instantiate(itemPrefab, transform.position, Quaternion.identity);
}
else
{
Debug.Log("데이터베이스에 아이템이 없다");
}
}
}
아이템의 Prefab 파일 경로를 지정해서(프리팹 이름은 무조건 item1, item2 순서로 지정) 월드에 드랍하는 코드. input Field를 사용해서 아이디를 입력받아서 생성. 무사히 생성되는 것을 확인했다.
이건 어디까지나 Prefab 형태로 소환할 경우 그렇고, 인벤토리 내에서는 직접 소환할 필요 없이 다른 정보들로 충분하다. 인벤토리는 Item Manager - Inventory - Item Slot 으로 이어지는데, 우선 Slot이 가지고 있을 정보는 아래와 같다.
public int itemID;
public string itemName;
public string itemDescription;
public int itemAmount;
public Image itemIcon;
public bool canCount;
public TextMeshProUGUI itemAmountText;
아이템 고유한 숫자인 ID, 아이템 이름, 설명, 양, 아이콘이 필요하다. 또, 한 슬롯에 중복해서 들어갈 수 있을 지 없을 지를 결정하는 bool 값도 하나 필요하다.
public virtual void SetItemSlot(int getItemID, int amount)
{
var itemDataAll = ItemManager.Instance.ReadItemData(getItemID);
//itemID = getItemID;
//itemName = itemDataAll[eItemKeyColumns.Name.ToString()] as string;
//...
}
그리고 해당 값들은 ItemManger에서 ReadItemData를 통해 Object 형식으로 값을 읽어와서 각각 대입해주면, 슬롯에 필요한 정보를 입력할 수 있다. 더 좋은 방법이 있을 것 같지만, 우선은 구현을 목적으로 한다.
그렇게 정보를 입력하고, 임시로 데이터를 넣어보자. 슬롯 하나를 1번 아이템, 4개를 넣었더니 무사히 작동한다.
그런데 이러면 Icon, Amount 데이터만 사용된 셈이다. 마우스를 슬롯에 올렸을 때, 관련 정보들을 볼 수 있었으면 좋겠다.
public class ItemSlot : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
public void OnPointerEnter(PointerEventData eventData)
public void OnPointerExit(PointerEventData eventData)
그렇다면 마우스 동작에 관여해야하므로, 마우스의 Enter, Exit 이벤트 핸들러를 Slot이 상속받아서 사용해보자.
UI를 만들고, UI의 Text가 Slot의 정보를 받아올 수 있도록 하여 마우스가 슬롯 위에 올라오면 UI를 띄우고, 나가면 다시 비활성화 하는 것이다.
툴팁 UI를 만들어서, 각 아이템 슬롯에 올렸을 때 정보를 제공하도록 만들었다. 관련 내용이 더 들어갈 지는 모르겠으나, 일단은 Name, Description, Amount에 대한 정보가 들어간다.
그럼 이제 슬롯에 대해서 만들어졌으니, 인벤토리 UI를 본격적으로 만들어보자. 원하는 구상도는 아래와 같다.
칸을 3개로 나눈다.
왼쪽은 인벤토리.
중앙은 퀵슬롯.
오른쪽은 제작창 혹은 상자. (어떤 것을 열었느냐에 따라 바뀐다, 둘이 같이 보일 필요는 없다.)
각 네모칸과 퀵슬롯의 1-8번은 슬롯 역할을 겸한다.
일단 비어있을 때 검은 네모칸을 입력시켜서 다소 부자연스럽기는 하나, 나중에 고치면 될 일. 제대로 만들어졌다.
중앙 위의 Input Field는 아이템 ID를 입력해서 인벤토리에 생성하는 임시 UI로, 나중에 지우자.
'팀프로젝트' 카테고리의 다른 글
[完] 인벤토리, 아이템 제작 요약 (1) | 2024.01.21 |
---|---|
[05] 아이템 슬롯 상속, Create Table (0) | 2023.12.14 |
[04] 아이템 슬롯 상속, 퀵슬롯 (1) | 2023.12.14 |
[03] 인벤토리 기능 (0) | 2023.12.11 |
[01] 아이템 데이터베이스 (0) | 2023.11.23 |