데이터 테이블 만들고 연동하기 연습
2023. 9. 10.

-위의 자료를 바탕으로 각각 json 파일을 만들어줬다.

-scrollview의 영역을 잡아 준 뒤, 빈 오브젝트로 content를 생성한다. content size fitter와 horizontal Layout Group을 추가한 후 다음과 같이 값을 변경해준다.

GoldPackData.cs/ DataManager 수정

-데이터 매니저에 LoadGoldPackData 메서드와 GetGoldPackDatas 메서드 추가. 데이터 로드 시 사용한다.

메인에서 호출, 아틀라스 생성
cell에 데이터 불러오기

 

구현결과

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;

}

 

myoskin