8년차 모션그래픽디자이너의 고군분투
[Unity Engine] 인벤토리 시스템 구현하기 -5- | 아이템 수집해서 인벤토리 창에 넣기 | C#, Inventory System, 포션 아이템 관리하기 본문
코자이너/Unity
[Unity Engine] 인벤토리 시스템 구현하기 -5- | 아이템 수집해서 인벤토리 창에 넣기 | C#, Inventory System, 포션 아이템 관리하기
쓰리디사람3Dperson 2024. 3. 20. 12:58반응형
저 같은 경우는 플레이어 상태창에서도 포션에 접근이 가능했고 인벤토리에서도 포션에 접근이 가능한 기능을 구현하려고 했기 때문에 좀 복잡했습니다.
때문에 포션 아이템 스크립트를 따로 만들어야 했습니다.
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UI;
public class ItemPotion : MonoBehaviour
{
public static ItemPotion Instance;
public ItemData item;
public Image PositionIcon;
public TextMeshProUGUI Count;
private void Start()
{
Instance = this;
item.Value = 1;
Refresh();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.LeftControl))
{
EatPotion();
}
Refresh();
}
public void EatPotion()
{
if (item.Value > 0)
{
item.Value -= 1;
FindObjectOfType<Player>().Heal(10);
}
else if (item.Value == 0)
{
InventoryManager.Instance.Remove(item);
}
else
{
return;
}
Refresh();
}
public void Refresh()
{
if (item.Value > 0)
{
PositionIcon.sprite = item.Icon;
Count.text = $"{item.Value}";
}
else if (item.Value == 0)
{
Count.text = "0";
}
else
{
return;
}
}
}
인벤토리에 넣을 인벤토리 스크립트입니다. 여기서 인벤토리 UI를 최종적으로 관리해줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UnityEditor.Progress;
public class Inventory : MonoBehaviour
{
public static Inventory instance { get; private set; }
public UI_InventoryDescription InventoryDescriptionUI;
void Start()
{
instance = this;
this.gameObject.SetActive(false);
InventoryManager.onItemChangedCallback += UpdateUI;
// 인벤토리에 아이템이 있으면 추가
}
private void OnDestroy()
{
InventoryManager.onItemChangedCallback -= UpdateUI;
// 인벤토리에 아이템이 없으면 삭제
}
public void UpdateUI()
{
/* // 인벤토리 UI 슬롯을 모두 비활성화합니다.
foreach (var slot in ItemInventoryUISlots)
{
slot.gameObject.SetActive(false);
}*/
// 인벤토리에 있는 각 아이템에 대해 UI 슬롯을 활성화하고, 아이템 정보를 표시합니다.
for (int i = 0; i < InventoryManager.Instance.items.Count; i++)
{
InventoryManager.Instance.ItemInventoryUISlots[i].gameObject.SetActive(true);
InventoryManager.Instance.ItemInventoryUISlots[i].itemIconNameText.text = InventoryManager.Instance.items[i].Name;
InventoryManager.Instance.ItemInventoryUISlots[i].itemNameText.text = InventoryManager.Instance.items[i].Name;
InventoryManager.Instance.ItemInventoryUISlots[i].itemDescriptionText.text = InventoryManager.Instance.items[i].Description;
InventoryManager.Instance.ItemInventoryUISlots[i].itemIconImage.sprite = InventoryManager.Instance.items[i].Icon;
InventoryManager.Instance.ItemInventoryUISlots[i].itemBigImage.sprite = InventoryManager.Instance.items[i].BigImage;
InventoryManager.Instance.ItemInventoryUISlots[i].countitemText.text = $"{InventoryManager.Instance.items[i].Value}";
// ItemInventoryUISlots[i].CurrentitemData = items[i]; // 필요에 따라 추가
}
}
}
미숙한 코드지만 비전공자로서 2개월동안 유니티 씨샵을 배우고 작성해본 코드입니다.
도움이 되었으면 좋겠습니다.
반응형
'코자이너 > Unity' 카테고리의 다른 글
Comments