[UNITY],[C#]/TIL : UNITY

[Unity] JSON 유틸리티 이해하기

네,가능합니다 2024. 11. 5. 10:44

오늘은 어제 특강때 공부했던 JSON 유틸리티를 이해해보는 시간을 가져봐야할것같다..

 

실제로 예제를 통해 데이터를 저장 및 불러오기를 해볼거다.

 

우선 데이터 구조를 만들어보자

 

1. 데이터 구조 만들기

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int level;
}

[System.Serializable]을 작성하여 클래스가  JSON 형태로 변환될 수 있게 만들어줍니다.

그리고, 클래스에 저장하고자 하는 모든 변수를 정의해줍니다.

 

2. 데이터 저장 및 불러오기

using System.IO; // 네임스페이스 추가
using UnityEngine;

public class SaveLoadManager : MonoBehaviour
{
    private string saveFilePath;

    void Start()
    {
        // 파일저장경로지정 Application.persistentDataPath 사용시, 플랫폼에 맞는 적절한 위치에 저장
        saveFilePath = Path.Combine(Application.persistentDataPath, "playerData.json");
    }

    public void SaveData(PlayerData data)
    {
        // PlayerData 객체를 JSON 형태로 변환
        string json = JsonUtility.ToJson(data, true);
        
        // 파일로 저장
        File.WriteAllText(saveFilePath, json);

        Debug.Log("저장이 완료되었습니다. 저장 위치 : " + saveFilePath);
    }

    public PlayerData LoadData()
    {
        // 저장된 파일이 있는지 확인
        if (File.Exists(saveFilePath))
        {
            // 있다면 파일의 내용을 읽어오고
            string json = File.ReadAllText(saveFilePath);

            // 해당 내용은 PlayerData객체로 역직렬화 합니다.
            PlayerData data = JsonUtility.FromJson<PlayerData>(json);

            Debug.Log("데이터 불러오기 성공: " + data.playerName + ", Level: " + data.level);

            return data;
        }
        // 저장된 파일이 없으면
        else
        {
            Debug.LogWarning("저장된 파일이 없음.");
            return null;
        }
    }
}

 

 

3. 사용하기

public class GameManager : MonoBehaviour
{
    private SaveLoadManager saveLoadManager;
    private PlayerData playerData;

    void Start()
    {
        // 초기화
        saveLoadManager = GetComponent<SaveLoadManager>();
        
        // 플레이어 데이터를 생성하고
        playerData = new PlayerData
        {
            playerName = "PlayerOne",
            level = 1,
        };

        // 데이터 저장 및 불러오기
        saveLoadManager.SaveData(playerData);

        PlayerData loadedData = saveLoadManager.LoadData();
        if (loadedData != null)
        {
            Debug.Log("불러온 데이터: " + loadedData.playerName);
        }
    }
}