정명직의 게임개발

[Unity] JSON 저장 & 불러오기 구현하기 본문

Unity

[Unity] JSON 저장 & 불러오기 구현하기

정명직 2023. 7. 3. 23:07

JSON?

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다.

{
   "level":1,
   "timeElapsed":47.5,
   "Name":"Player"
}

JSON 형식

JSON 직렬화

JsonUtility 클래스를 사용하여 Unity 오브젝트를 JSON 포맷으로 상호 전환할 수 있습니다. 예를 들어 JSON 직렬화를 사용하여 웹 서비스와 상호작용하거나, 데이터를 텍스트 기반 포맷으로 쉽게 패킹하거나 언패킹한다.

JSON 데이터에 저장하려는 변수를 설명하는 클래스 또는 구조를 만든다

[Serializable]
public class MyClass
{
        public int level;
        public float timeElapsed;
        public string name;
}

Serializable 속성으로 표시하여 JSON 시리얼라이저와 연동되도록 만듭니다.

MyClass myObject = new MyClass();
myObject.level = 1;
myObject.timeElapsed = 47.5f;
myObject.name = "Player";

클래스를 생성하고 값을 넣어준다.

JsonUtility.ToJson

JsonUtility.ToJson 메서드를 사용하여 오브젝트를 JSON 포맷으로 직렬화 한다.

string json = JsonUtility.ToJson(myObject);
// json : '{"level":1,"timeElapsed":47.5,"name":"Player"}'
  • ToJson 메서드는 JSON 출력을 보기 좋게 출력하는 기능을 지원한다. 이 기능은 기본적으로 꺼져 있지만, true를 두 번째 파라미터로 전달하여 켤 수 있다
    JsonUtility.ToJson(myObject, true);

JsonUtility.FromJson

JsonUtility.FromJson 메서드를 사용하여 JSON을 다시 오브젝트로 전환한다.

myObject = JsonUtility.FromJson<MyClass>(json);

저장 & 불러오기 구현하기

using System.IO;
using UnityEngine;

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

public class DataManager : MonoBehaviour
{
    public PlayerData playerData = new PlayerData();

    public void Awake()
    {
        LoadData();
    }

    public void SaveData()
    {
           // Json 직렬화 하기
        string json = JsonUtility.ToJson(playerData);

       // 외부 폴더에 접근해서 Json 파일 저장하기
        // Application.persistentDataPath : 특정 운영체제에서 앱이 사용할 수 있도록 허용한 경로
        File.WriteAllText(Path.Combine(Application.persistentDataPath, "PlayerData.json"), json);
    }

    public void LoadData()
    {
        // Json 파일 경로 가져오기
        string path = Path.Combine(Application.persistentDataPath, "PlayerData.json");

        // 지정된 경로에 파일이 있는지 확인한다
        if (File.Exists(path))
        {
               // 경로에 파일이 있으면 Json을 다시 오브젝트로 변환한다.
            string json = File.ReadAllText(path);
            playerData = JsonUtility.FromJson<PlayerData>(json);
        }
    }
}

이처럼 JSON 을 사용하면 유니티에서 게임 상태, 플레이어 정보, 레벨 데이터 등을 JSON 형식으로 저장하고 필요할 때 로드하여 사용 할 수 있습니다.

'Unity' 카테고리의 다른 글

[Unity] ScriptableObject 한방에 이해하기  (1) 2023.07.10
[Unity] SerializeField, Serializable ??  (0) 2023.07.06
[Unity] 오브젝트를 움직여 보자!  (2) 2023.07.05