유니티 엔진 클라이언트/개인공부
[유니티] 미션 데이터 직렬화 복습
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