[Unity] JSON 저장 & 불러오기

정명직·2023년 6월 18일
1
post-thumbnail

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);
       }
   }
}
profile
유니티 클라이언트 개발자

0개의 댓글