유니티 엔진 클라이언트/개인공부

[유니티] 미션 데이터 직렬화 복습

Bueong_E 2023. 2. 15. 09:36
반응형
SMALL

데이터 직렬화 하는데 까지 연습한 데이터

불러오는 과정에서 뭔가 잘못되었는지 처음 실행할때와 이후 실행할때가 조금 달라 좀더 분석해 보아야하는 코드들

 

UIMain

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class UIMain : MonoBehaviour
{
    public UIScrollviewOverLook uIScrollviewOverLook;

    private void Start()
    {

        DataManager2.Instance.LoadMissionData();

        string path = string.Format("{0}/mission_info.json", Application.persistentDataPath);

        if(File.Exists(path))
        {
           string json = File.ReadAllText(path);
           MissionData[] info = JsonConvert.DeserializeObject<MissionData[]>(json);
        }
        this.uIScrollviewOverLook.Init();
    }
}

UIscrollviewOverLook

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIScrollviewOverLook : MonoBehaviour
{
    public UIScrollviewMission uIScrollviewMission;

    public void Init()
    {
        this.uIScrollviewMission.Init();
    }
}

UIScrollviewMission

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;

public class UIScrollviewMission : MonoBehaviour
{
    public GameObject uiScrollPracticeView;
    public Transform contents;
    public SpriteAtlas atlas;

    public void Init()
    {
        var mList = DataManager2.Instance.GetMissionList();
        float temp = 0;
        for (int i = 0; i < mList.Count; i++) {

            GameObject go = Instantiate(this.uiScrollPracticeView,this.contents);
            UIScrollPracticeView scrollView = go.GetComponent<UIScrollPracticeView>();
            var practicView = uiScrollPracticeView.GetComponent<UIScrollPracticeView>();
            temp += 0.1f;
            practicView.txtMission.text = mList[i].name;
            practicView.txtObject.text = mList[i].objective;
            practicView.txtAward.text = mList[i].award_Count.ToString();
            practicView.progress.text = string.Format("{0} / {1}", mList[i].progress, mList[i].Progress_Max);
            practicView.imgMission.sprite = this.atlas.GetSprite(mList[i].mission_Sprite);
            practicView.imgAward.sprite = this.atlas.GetSprite(mList[i].award_Sprite);
            practicView.Slider.value= mList[i].progress+temp;
            Debug.Log(mList[i].id);

        }
    }
}

UIScrollPracticeView

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.U2D;

public class UIScrollPracticeView : MonoBehaviour
{
    public Image imgMission;
    public Image imgAward;
    public TMP_Text txtMission;
    public TMP_Text txtObject;
    public TMP_Text txtAward;
    public Slider Slider;
    public TMP_Text progress;
   
}

DataManager2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.Linq;
using JetBrains.Annotations;

public class DataManager2 : MonoBehaviour
{
    public static readonly DataManager2 Instance = new DataManager2();

    Dictionary<int, MissionData> dicMissionData; /*= new Dictionary<int, MissionData>();  */  

    //생성자
    public DataManager2() { }

    public void LoadMissionData()
    {
        TextAsset asset = Resources.Load<TextAsset>("Data/Mission_data");
        string json = asset.text;
        Debug.Log(json);


        MissionData[] missionData = JsonConvert.DeserializeObject<MissionData[]>(json);
        this.dicMissionData = missionData.ToDictionary(x => x.id);       
    }

    public MissionData GetMissionData(int id)
    {
        if (dicMissionData.ContainsKey(id))
        {
            MissionData missionData = this.dicMissionData[id];
            return missionData;
        }
        else 
        {
            Debug.LogFormat("해당 아이디 {0} 에 해당하는 미션데이터가 없습니다.",id);
            return  null;      
        }
    }

    public List<MissionData> GetMissionList() 
    {
        List<MissionData> list = new List<MissionData>(); 
        list = dicMissionData.Values.ToList();  
        return list;    
    }
}

 

반응형
LIST