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
반응형
'산대특 > 게임 UIUX프로그래밍' 카테고리의 다른 글
[LeanUGUI] Boss의 HP 바를 Boss 위에 따라다니게 만들기 (0) | 2024.03.11 |
---|---|
[LearnUGUI] 인벤토리 만들기(3) - 完 (생성/저장/삭제) (0) | 2024.02.22 |
[LearnUGUI] 인벤토리 만들기 (1) - Grid Scroll VIew 만들기 (0) | 2024.02.18 |
[LearnUGUI] 동적 Gem ScrollView + 데이터 연동 구현하기 (0) | 2024.02.11 |
[LearnUGUI] Start 버튼 클릭 시 씬 전환 + 캐릭터 이동 (0) | 2024.02.10 |