앞서 gold에 관해서 해보았고 이번에는 gem을 해보도록 하자
앞서 해놓았던 부분에서 약간만 수정하면 된다.
1.데이터 연동
(1)gem_data 엑셀 파일을 만든다.
(2)엑셀 파일을 기반으로 json 파일을 만든다.
(3)Resources 폴더에 넣는다.
2.Atlas 생성
3.코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GemData
{
public int id;
public string name;
public int type;
public int value;
public float price;
public string icon_name;
public float pos_x;
public float pos_y;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using Newtonsoft.Json;
using System.Linq;
public class DataManager
{
public static readonly DataManager Instance = new DataManager();
private Dictionary<int, GoldData> dicGoldDatas;
private Dictionary<int, GemData> dicGemDatas;
public Dictionary<int, GoldData> DicGoldDatas { get { return dicGoldDatas; } }
public Dictionary<int, GemData> DicGemDatas { get { return dicGemDatas; } }
private DataManager() { }
public void LoadData()
{
TextAsset textGoldData = Resources.Load<TextAsset>("data/gold_data");
GoldData[] goldDatas = JsonConvert.DeserializeObject<GoldData[]>(textGoldData.text);
this.dicGoldDatas = goldDatas.ToDictionary(x => x.id);
TextAsset textGemData = Resources.Load<TextAsset>("data/gem_data");
GemData[] gemDatas = JsonConvert.DeserializeObject<GemData[]>(textGemData.text);
this.dicGemDatas=gemDatas.ToDictionary(x => x.id);
}
public GoldData GetGoldData(int id)
{
return this.dicGoldDatas[id];
}
public GemData GetGemData(int id)
{
return this.dicGemDatas[id];
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
public class AtlasManager
{
public static readonly AtlasManager Instance = new AtlasManager();
private SpriteAtlas goldIconAtlas;
private SpriteAtlas gemIconAtlas;
private AtlasManager()
{
}
public void LoadAtlas()
{
this.goldIconAtlas = Resources.Load<SpriteAtlas>("atlas/GoldAtlas");
this.gemIconAtlas = Resources.Load<SpriteAtlas>("atlas/GemAtlas");
}
public Sprite GetGoldIconSprite(string icon_name)
{
return this.goldIconAtlas.GetSprite(icon_name);
}
public Sprite GetGemIconSprite(string icon_name)
{
return this.gemIconAtlas.GetSprite(icon_name);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIMain : MonoBehaviour
{
[SerializeField]
private UIPageShop uiPageShop;
// Start is called before the first frame update
void Start()
{
DataManager.Instance.LoadData();
AtlasManager.Instance.LoadAtlas();
this.uiPageShop.Init();
this.uiPageShop.onClickPrice = (id) =>
{
GemData data = DataManager.Instance.GetGemData(id);
Debug.LogFormat("<color=blue>{0} : {1}</color>", (UIGemCell.eAmountType)data.type, data.price);
};
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIPageShop : MonoBehaviour
{
[SerializeField]
private UIScrollview uiScrollview;
public System.Action<int> onClickPrice;
public void Init()
{
uiScrollview.Init();
uiScrollview.onClickPrice = (id) =>
{
GemData data = DataManager.Instance.GetGemData(id);
Debug.LogFormat("<color=yellow>{0} : {1}</color>", (UIGemCell.eAmountType)data.type, data.price);
this.onClickPrice(data.id);
};
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using UnityEngine;
public class UIScrollview : MonoBehaviour
{
[SerializeField]
private GameObject uiGoldCellPrefab;
[SerializeField]
private Transform parent;
private List<UIGemCell> arrUIGoldCell = new List<UIGemCell>();
public System.Action<int> onClickPrice;
public void Init()
{
//foreach(GoldData goldData in DataManager.Instance.DicGoldDatas.Values)
//{
// GoldData data = goldData;
// GameObject uiGoldCellGo = Instantiate(uiGoldCellPrefab, parent);
// UIGoldCell uiGoldCell = uiGoldCellGo.GetComponent<UIGoldCell>();
// uiGoldCell.Init(data.id);
// arrUIGoldCell.Add(uiGoldCell);
// uiGoldCell.btnPrice.onClick.AddListener(() =>
// {
// Debug.LogFormat("{0} : {1}", (UIGoldCell.eGoldType)data.type, data.price);
// this.onClickPrice(data.id);
// });
//}
foreach (GemData gemData in DataManager.Instance.DicGemDatas.Values)
{
GemData data = gemData;
GameObject uiGoldCellGo = Instantiate(uiGoldCellPrefab, parent);
UIGemCell uiGemCell = uiGoldCellGo.GetComponent<UIGemCell>();
uiGemCell.Init(data.id);
arrUIGoldCell.Add(uiGemCell);
uiGemCell.btnPrice.onClick.AddListener(() =>
{
Debug.LogFormat("{0} : {1}", (UIGemCell.eAmountType)data.type, data.price);
this.onClickPrice(data.id);
});
}
}
}
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UIGemCell : MonoBehaviour
{
public enum eAmountType
{
Tiny, Fistful, Pouch, Box, Chest, Vault
}
[SerializeField]
private Image icon;
[SerializeField]
private TMP_Text txtName;
[SerializeField]
private TMP_Text txtValue;
[SerializeField]
private TMP_Text txtPrice;
public Button btnPrice;
private eAmountType type;
private int id;
public void Init(int id)
{
//this.id = id;
//GoldData data = DataManager.Instance.GetGoldData(this.id);
//this.icon.sprite = AtlasManager.Instance.GetGoldIconSprite(data.icon_name);
//this.icon.SetNativeSize();
//this.icon.transform.localPosition = new Vector2(data.pos_x, data.pos_y);
//this.txtName.text = data.name;
//this.type = (eGoldType)data.type;
//this.txtValue.text = string.Format($"{data.value:#,##0} Gold");
//this.txtPrice.text = string.Format($"US ${data.price}");
this.id = id;
GemData data = DataManager.Instance.GetGemData(this.id);
this.icon.sprite = AtlasManager.Instance.GetGemIconSprite(data.icon_name);
this.icon.SetNativeSize();
this.icon.transform.localPosition = new Vector2(data.pos_x, data.pos_y);
this.txtName.text = data.name;
this.type = (eAmountType)data.type;
this.txtValue.text = string.Format($"{data.value}");
this.txtPrice.text = string.Format($"US ${data.price}");
}
}
결과
탭 만들고 gem과 gold 왔다갔다 하는 것까지 만들려고 했으나 시간관계상 내일 이어서 하기로,,,
'K-digital traning > 유니티 심화' 카테고리의 다른 글
[주말과제]UGUI+데이터 연동(1) (0) | 2023.09.10 |
---|---|
HeroShooter에 new Input System 적용 (0) | 2023.09.03 |
[주말과제] HeroShooter stage1까지 (0) | 2023.08.28 |
OverlapSphere 연습 (0) | 2023.08.21 |
캐릭터 이동 후 normal(법선벡터)로 회전 (0) | 2023.08.21 |