아이템 슬롯은 SetSlot() 함수를 포함해, 드래그와 포인터, 클릭 이벤트들을 대량으로 포함하고 있다.
그렇지만 아이템 슬롯이 다 똑같지는 않은데, 이번에 제작하는 게임에서의 아이템 슬롯은 3가지 종류가 있다.
1. 인벤토리 슬롯
2. 퀵 슬롯
3. 제작창 슬롯
똑같이 아이템 ID를 기반으로 아이콘과 정보들을 데이터베이스에서 읽어와서 입력해놓지만, 각자 가지고 있을 기능은 조금 다르다.
인벤토리 슬롯 | 퀵슬롯 | 제작 슬롯 | |
툴팁 설명 | TRUE | FALSE | TRUE |
드래그-드랍 | TRUE | TRUE | FALSE |
아이템 삭제 | TRUE | FALSE | FALSE |
아이템 사용 | FALSE | TRUE | FALSE |
슬롯 세팅 | TRUE | TRUE | FALSE |
이 세 슬롯은 공통점을 공유하니, 완전 각자 독립적으로 짜는 것은 비효율적이다. 그런고로, 기존에 만들어놓은 인벤토리 슬롯 코드를 기반으로 상속받아 사용하자. 기존에 TRUE인 기능은 그대로 상속받거나, Override해서 깡통으로 만들어놓는다. FALSE인 기능인 아이템 사용은 퀵슬롯에서만 작동하면 되니, QuickSlot : ItemSlot으로 받아와서 새로 작성해주자.
public override void OnPointerEnter(PointerEventData eventData)
{
//깡통
}
public override void OnPointerExit(PointerEventData eventData)
{
//깡통
}
이렇게 슬롯에 있는 것을 세팅하고 나면, 슬롯의 안과 밖을 조정할 필요가 있다. 퀵슬롯 같은 경우에는 사용했을 때 작동하는 것들 (장비일 경우, 도구일 경우, 음식일 경우). 그리고 제작 슬롯같은 경우는 제작이라는 기능이 새로 만들어질 필요성이 있다.
먼저 퀵슬롯. 퀵슬롯에 놓을 수 있는 아이템은 손에 장착할 수 있는 아이템으로, 데이터베이스에서 bool값을 받아와서 판단한다. 손에 장착할 수 있는 아이템을 놓으면 Tab키를 통해 손에 쥘 수 있고, 마우스 버튼을 누르면 사용 한다.
이 때, '무기'의 사용은 공격. '음식'의 사용은 섭취가 된다. 이는 enum을 사용해서 손에 든 아이템의 타입을 확인해 줄 필요가 있다.
public enum eItemType
{
None,
Food,
Knife,
Axe,
Pickaxe,
Torch
}
우리 게임에서는 도구마다 모션이 다르게 나오기 때문에, 음식과 칼, 도끼, 곡괭이, 횃불이라는 세부 타입으로 분류했다.
public void UseQuickSlot()
{
//선택 슬롯 아니면
if (!isSelected)
{
return;
}
//빈 슬롯 선택시 맨손
if(itemID == 0)
{
}
//소리 재생
//선택된 슬롯일 경우 중앙 슬롯 아이콘을 위 아이콘으로 대체.
//손에 드는 코드- 타입별
switch (itemType)
{
case eItemType.Food:
break;
case eItemType.Knife:
break;
case eItemType.Axe:
break;
case eItemType.Pickaxe:
break;
case eItemType.Torch:
break;
default:
break;
}
}
public override void EatFood()
{
//이 슬롯에 있는 음식 아이템 사용
}
그리고 선택된 슬롯에 있는 아이템의 종류를 Switch-case로 나눠서 실행.(음식의 경우는 또 추가해서 만들어주자. itemID마다 회복량이 다르기 때문)
이 EatFood를 퀵슬롯 내에서 해결할 수 있었으면 좋았을테지만, 처음 짤 때의 문제로 ItemManager에서 실행하도록 되어있다. 다음에는 조금 더 생각해서 짜봐야할 부분.(가능한 한 스크립트가 적은 기능을 실행하게 만들고 싶었는데, 매니저에서 너무나 많은 기능을 수행하게 짜버렸다. 작동은 하지만, 가능하다면 매니저는 관리 역할만 수행하게 했으면 좋았을 것)
그렇게 만든 것은, 퀵슬롯에 아이템을 등록하고 마우스를 끌어서 실행하는 것. 나름대로 만족한다.(소리 부분은 조금 더 가다듬어야하는데, 선택한 슬롯이 바뀔 때마다 소리가 나도록 하니 여러번 재생되는 문제가 있었다.)
※ 소리 재생에 대한 문제는 크게 두 가지가 있었다.
하나는 음성 파일 자체의 문제. 파일 내에서 (재생 타이밍을 맞추더라도, 소리가 바로 재생되는 것이 아니라면 의미가 없다.) 이건 알맞은 파일을 구하거나, 음성 파일을 편집해야한다.
둘은 소리의 재생을 연속해서 호출해도 자연스럽게 재생되는 것. 빠른 속도로 슬롯을 바꿔서 소리 재생을 여러번 호출하면 소리 중첩 현상이 일어난다.(혹은 기존의 소리가 끊기거나.) 여기서는 중첩시에도 소리가 들렸으면 좋겠는 것은 PlayOneShot을. 그 이외에는 Play를 사용하면서 진행했다.
'팀프로젝트' 카테고리의 다른 글
[完] 인벤토리, 아이템 제작 요약 (1) | 2024.01.21 |
---|---|
[05] 아이템 슬롯 상속, Create Table (0) | 2023.12.14 |
[03] 인벤토리 기능 (0) | 2023.12.11 |
[02] 아이템 슬롯 (0) | 2023.11.28 |
[01] 아이템 데이터베이스 (0) | 2023.11.23 |