데이터 테이블 만들고 연동하기 연습
-위의 자료를 바탕으로 각각 json 파일을 만들어줬다.
-scrollview의 영역을 잡아 준 뒤, 빈 오브젝트로 content를 생성한다. content size fitter와 horizontal Layout Group을 추가한 후 다음과 같이 값을 변경해준다.
-데이터 매니저에 LoadGoldPackData 메서드와 GetGoldPackDatas 메서드 추가. 데이터 로드 시 사용한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIGoldMain : MonoBehaviour
{
[SerializeField] UIGoldScrollView goldScrollView;
// Start is called before the first frame update
void Start()
{
AtlasManager.instance.LoadAtlases();
DataManager.instance.LoadGoldPackData();
this.goldScrollView.Init();
}
// Update is called once per frame
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.IO;
using System.Linq;
public class DataManager
{
public static readonly DataManager instance = new DataManager();
private List<ChestData> chestDatas = new List<ChestData>();
private Dictionary<int, MissionData> dicMissionDatas;
private Dictionary<int, GoldPackData> dicGoldPackDatas;
public void LoadChestData()
{
string json = File.ReadAllText("./Assets/Resources/chest_data.json");//파일 읽기
// Debug.Log(json);
this.chestDatas = JsonConvert.DeserializeObject<List<ChestData>>(json);//역직렬화
}
public List<ChestData> GetChestDatas()
{
return this.chestDatas;
}
public void LoadGoldPackData()
{
TextAsset asset = Resources.Load<TextAsset>("goldPacks_data");
string json = asset.text;
GoldPackData[] goldPackDatas = JsonConvert.DeserializeObject<GoldPackData[]>(json);//역직렬화
this.dicGoldPackDatas = goldPackDatas.ToDictionary(x => x.id);//배열 요소로 새로운 사전 생성
Debug.LogFormat("this.dicGoldPackDatas.Count: {0}", this.dicGoldPackDatas.Count);
}
public List<GoldPackData> GetGoldPackDatas()
{
return this.dicGoldPackDatas.Values.ToList();
}
public void LoadMissionData() //미션 데이터 로드 하기
{
//Resources 폴더에서 mission_data 에셋 (TextAsset) 을 로드
TextAsset asset = Resources.Load<TextAsset>("mission_data");
//json 문자열 가져오기
string json = asset.text;
Debug.Log(json);
//역직렬화
MissionData[] arrMissionDatas = JsonConvert.DeserializeObject<MissionData[]>(json);
Debug.LogFormat("arrMissionDatas.Length: {0}", arrMissionDatas.Length);
//사전에 넣기
this.dicMissionDatas = arrMissionDatas.ToDictionary(x => x.id); //배열에 있는 요소로 새로운 사전을 만듬
Debug.LogFormat("this.dicMissionDatas.Count: {0}", this.dicMissionDatas.Count);
}
public List<MissionData> GetMissionDatas()
{
return this.dicMissionDatas.Values.ToList();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIGoldScrollView : MonoBehaviour
{
[SerializeField] GameObject goldCellGo;
[SerializeField] GameObject contentGo;
private List<UIGoldCell> uiCellList = new List<UIGoldCell>();
// Start is called before the first frame update
void Start()
{
}
public void Init()
{
List<GoldPackData> data = DataManager.instance.GetGoldPackDatas();
for(int i = 0; i < data.Count; i++)
{
GameObject go = Instantiate<GameObject>(this.goldCellGo, this.contentGo.transform);
//cell 프리팹을 content오브젝트의 자식으로 생성
this.uiCellList.Add(go.GetComponent<UIGoldCell>());
this.uiCellList[i].Init(data[i]);//매개 변수로 정보 전달
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class UIGoldCell : MonoBehaviour
{
[SerializeField] TextMeshProUGUI goldTypeText;
[SerializeField] Image cellIconImage;
[SerializeField] TextMeshProUGUI amoutText;
[SerializeField] TextMeshProUGUI buttonText;
// Start is called before the first frame update
void Start()
{
}
public void Init(GoldPackData data)
{
this.goldTypeText.text = data.goldTypeName;
this.amoutText.text = string.Format("{0} Gold",data.amount);
this.buttonText.text = string.Format("US ${0}", data.price);
var atlas = AtlasManager.instance.GetAtlas("goldPacks");
this.cellIconImage.sprite = atlas.GetSprite(data.goldTypeName);
this.cellIconImage.SetNativeSize();
if(data.id == 104 || data.id == 105)
{
// this.cellIconImage.rectTransform.sizeDelta *= 0.7f;
this.cellIconImage.rectTransform.sizeDelta = new Vector2(520, 400);
}
else
{
this.cellIconImage.rectTransform.sizeDelta = new Vector2(360, 370);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GoldPackData
{
public int id;
public string goldTypeName;
public int amount;
public float price;
}
'C# 기초 Homework' 카테고리의 다른 글
활쏘기 연습-궁수의 전설 (0) | 2023.08.20 |
---|---|
복소수와 사원수, 벡터 (1) | 2023.08.13 |
Unity-Homework-몬스터 이동&공격(수정중) (2) | 2023.08.06 |
미션-보상 만들기 (2) | 2023.07.31 |
디자인 패턴& 싱글톤 패턴,Dictionary 검색 (0) | 2023.07.26 |