이동과 아이템 획득을 구현했으니
하단 핫바와 아이템 이동, 아이템 툴팁 출력을 구현한다.
하단 핫바의 경우 가장 윗줄 인벤토리와 연동되어있다.
Hotbar용 슬롯 프리팹을 만들고 간단하게 기존 Item을 참고하여 새로고침하도록 되어있다.
public void Toggle()
{
if (this.gameObject.activeSelf)
{
HideDescription();
if(SwapSlotBox != null)
{
SwapSlotBox.OffHighLight();
SwapSlotBox = null;
}
this.gameObject.SetActive(false);
HotBar.gameObject.SetActive(true);
}
else
{
this.gameObject.SetActive(true);
HotBar.gameObject.SetActive(false);
}
}
기존의 Toggle에 인벤토리와 반대로 켜고 꺼지도록 세팅.
Inventory.cs에 툴팁용 오브젝트를 추가해두고 켜고 끄는 함수를 제공했다.
public void ShowDescription(IV_Item Item)
{
ItemDescriptTitle.text = Item.ItemName;
ItemDescriptBody.text = Item.ItemDescript;
ItemDescription.gameObject.SetActive(true);
IsDescriptionShow = true;
}
public void HideDescription()
{
ItemDescription.gameObject.SetActive(false);
IsDescriptionShow = false;
}
그리고 실제 호출하는 순간은 각 슬롯 위에 마우스가 올라가거나 탈출할때 켜고 끄도록 했다.
public void OnPointerEnter(PointerEventData eventData)
{
if (!IsItemExist) return;
Player.Inventory.ShowDescription(CurrentItem);
}
public void OnPointerExit(PointerEventData eventData)
{
if (!IsItemExist) return;
Player.Inventory.HideDescription();
}
다음은 대망의 아이템 자리 교체인데...
기본적으로 SwapSlotBox라는 상자에 교체 요청이 들어온 슬롯을 저장해두고
두번째 슬롯이 들어오면 교체, 같은 슬롯이 들어오면 취소하는 식으로 구현했다.
public bool SwapSlots(IV_Slot Slot)
{
// 스왑슬롯박스가 비어있다면 이 슬롯을 저장
if (SwapSlotBox == null)
{
SwapSlotBox = Slot;
return true;
}
// 스왑슬롯박스에 동일한 슬롯이 들어있다면 선택 취소
else if (SwapSlotBox == Slot)
{
SwapSlotBox = null;
return false;
}
// 두 슬롯의 데이터 교환
IV_Item tempItem = SwapSlotBox.CurrentItem;
SwapSlotBox.SetItem(Slot.CurrentItem);
Slot.SetItem(tempItem);
SwapSlotBox = null;
HUDSynchronize();
return false;
}
우선은 클릭한 상자를 강조하고 두번째 클릭이 들어오면 둘을 교환하도록 해두었는데
나중에 마우스에 스프라이트를 붙여서 이동시키는 방향으로 수정했다(다음편에).
'📁 개발 히스토리' 카테고리의 다른 글
유니티 - 인벤토리 구현하기(5) (0) | 2025.02.24 |
---|---|
유니티 - 인벤토리 구현하기(4) (0) | 2025.02.23 |
유니티 - 인벤토리 구현하기(2) (0) | 2025.02.22 |
유니티 - 인벤토리 구현하기(1) (0) | 2025.02.22 |
유니티 - 캐릭터를 따라다니는 텍스트 박스(3) (0) | 2025.01.13 |