본문 바로가기

Unity

[Unity] json Save system

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
using TMPro;
using System.Linq;


[System.Serializable]
public class SaveData
{
    public List<string> playerNameData = new List<string>();
    public List<float> timeData = new List<float>();
    public Dictionary<float, string> rankingData = new Dictionary<float, string>();

    public string playerName;
    public float time;

}

public class SaveSystem : MonoBehaviour
{
    string path;
    SaveData saveData = new SaveData();

    void Start()
    {
        path = Path.Combine(Application.dataPath, "KiwiRanking.json");
       
        JsonLoad();
    }



        public void JsonLoad()
        {
            if (!File.Exists(path))
            {
                GameManager.instance.time = 0.1f;
                GameManager.instance.playerName = "YongGyu Im";
            GameManager.instance.rankingData = saveData.rankingData;
                JsonSave();
            }
            else
            {
                string loadJson = File.ReadAllText(path);
                saveData = JsonUtility.FromJson<SaveData>(loadJson);


            if (saveData != null) //Load
            {
                for (int i = 0; i < saveData.playerNameData.Count; i++)
                {
                    GameManager.instance.playerNameData.Add(saveData.playerNameData[i]);
                }
                for (int i = 0; i < saveData.playerNameData.Count; i++)
                {
                    GameManager.instance.timeData.Add(saveData.timeData[i]);
                }
                for (int i = 0; i < saveData.playerNameData.Count; i++)
                {
                    GameManager.instance.rankingData.Add(saveData.timeData[i], saveData.playerNameData[i]);
                }
            }
        }
    }

        public void JsonSave()
        {
            saveData.playerName = GameManager.instance.playerName;
            saveData.time = GameManager.instance.time;

            saveData.playerNameData.Add(saveData.playerName);
            saveData.timeData.Add(saveData.time);
            saveData.rankingData.Add(saveData.time, saveData.playerName);

            GameManager.instance.playerNameData.Add(saveData.playerName);
            GameManager.instance.timeData.Add(saveData.time);
            GameManager.instance.rankingData.Add(saveData.time, saveData.playerName);


            string json = JsonUtility.ToJson(saveData, true);

            File.WriteAllText(path, json);

        }

}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using System.Linq;
using System.Threading.Tasks;

public class SaveDataList : MonoBehaviour
{
    public void DataListLoad()
    {

        if (GameManager.instance.playerNameData.Count == 0)
        {
            Debug.Log("데이터 없음");
            return;
        }
        var queryAsc = GameManager.instance.rankingData.OrderBy(x => x.Key);

        int i = 0;
        foreach (KeyValuePair<float, string> pair in queryAsc)
        {
            transform.GetChild(i).GetChild(0).GetComponent<TextMeshProUGUI>().text = pair.Value +" (" + pair.Key.ToString() + ")";
            //pair.Value[i] + "\n" + pair.Key.ToString()[i].ToString();           
            i++;
            if(i==8)
            {
                break;
            }
        }
            

            /*
            for (int i = 0; i < GameManager.instance.playerNameData.Count; i++)
            {
                transform.GetChild(i).GetChild(0).GetComponent<TextMeshProUGUI>().text = GameManager.instance.playerNameData[i] + "\n" + GameManager.instance.timeData[i].ToString();
            }
            */
        
        
    }
}

'Unity' 카테고리의 다른 글