1. 실행 이미지

 

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;

public class UIInventory : MonoBehaviour
{
    [SerializeField] UIInvenScrollView uIInvenScrollView;
    [SerializeField] Button selectBtn;
    [SerializeField] Button deleteBtn;
    [SerializeField] Button createBtn;
    [SerializeField] TMP_Text count;

    private void Awake()
    {
        InvenDataManager.Instance.LoadItemData();
        InvenDataManager.Instance.LoadInfoData();

    }
    private void Start()
    {
        count.text = InvenDataManager.Instance.dicInfoDatas.Values.Sum(i => i.item_amount).ToString() + " / 200";
        this.createBtn.onClick.AddListener(() => {
            int randomNum = Random.Range(100, 130);
            //bool isItem = false;

            // 딕셔너리에서 randomNum과 일치하는 id를 가진 항목 접근
            if (InvenDataManager.Instance.dicInfoDatas.TryGetValue(randomNum, out ItemInfo existingItemInfo))
            {
                // 해당 항목의 item_amount 증가
                existingItemInfo.item_amount++;
                //isItem = true;
            }
            else
            {
                // 일치하는 항목이 없을 경우 새 항목 추가
                ItemInfo newItemInfo = new ItemInfo
                {
                    id = randomNum,
                    item_amount = 1
                };

                InvenDataManager.Instance.dicInfoDatas.Add(randomNum, newItemInfo);
            }

            // 데이터 저장
            InvenDataManager.Instance.SaveInfoData();
            uIInvenScrollView.UpdateUI();
            count.text = InvenDataManager.Instance.dicInfoDatas.Values.Sum(i => i.item_amount).ToString()+ " / 200";

        });
    }

}

2. UIInventory.cs

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;

public class UIInvenScrollView : MonoBehaviour
{
    [SerializeField] GameObject invenCellGO;
    [SerializeField] GameObject content;
    [SerializeField] private SpriteAtlas itemAtlas;
    private InvenCell[] invenCells;
    private Button[] cellBtns;


    private void Start()
    {
        UpdateUI();
    }

    public void UpdateUI()
    {
        // 기존에 생성된 Cell을 모두 제거
        foreach (Transform child in content.transform)
        {
            Destroy(child.gameObject);
        }

        // invenCells 배열 초기화 및 새로운 아이템으로 채우기
        invenCells = new InvenCell[InvenDataManager.Instance.dicInfoDatas.Count];
        int i = 0;

        foreach (var infoData in InvenDataManager.Instance.dicInfoDatas.Values)
        {
            GameObject cell = Instantiate(invenCellGO, content.transform);
            invenCells[i] = cell.GetComponent<InvenCell>();

            string spriteName = "";
            var itemData = InvenDataManager.Instance.dicItemDatas
                .FirstOrDefault(item => item.Value.id == infoData.id);

            // itemData에서 sprite_name을 얻어 sprite 할당
            spriteName = itemData.Value.sprite_name;
            invenCells[i].icon.sprite = itemAtlas.GetSprite(spriteName);
            invenCells[i].amount_text.text = InvenDataManager.Instance.dicInfoDatas[itemData.Value.id].item_amount.ToString();



            i++;
        }
    }


}

3. UIInvenScrollView.cs

반응형

+ Recent posts