-
직렬화를 이용하여 저장 객체 저장유니티/유니티 메인 2024. 2. 15. 18:02
우선 간단하게 json 형식으로 파일을 만들어준뒤 Resouces 폴더 안에 넣어준다
using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class Dediablo : MonoBehaviour { void Start() { var asset = Resources.Load<TextAsset>("Diablo"); string json = asset.text; Debug.Log(json); Diablo_Data data = JsonConvert.DeserializeObject<Diablo_Data>(json); Debug.LogFormat("=> {0}, {1}, {2}, {3}, {4}", data.id, data.name, data.minpower, data.maxpower, data.type); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Diablo_Data { public int id; public string name; public int minpower; public int maxpower; public string type; }
우선 여기까지는 이미 복습을 한 내용이다
출력도 잘 되는것을 확인할 수 있다
using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class Dediablo : MonoBehaviour { void Start() { var asset = Resources.Load<TextAsset>("Diablo"); string json = asset.text; Debug.Log(json); Diablo_Data data = JsonConvert.DeserializeObject<Diablo_Data>(json); Debug.LogFormat("=> {0}, {1}, {2}, {3}, {4}", data.id, data.name, data.minpower, data.maxpower, data.type); //저장 //직렬화 객체 생성 Diablo_Data info = new Diablo_Data(data.minpower, data.maxpower); ////직렬화 시작(객체 -> 문자열) 역직렬화(문자열 -> 객체) 결국 둘다 class가 필요 string serializedJson = JsonConvert.SerializeObject(info); ////파일로 저장 //Application.persistentDarapath : 플랫폼 os에 따라 경로를 자동으로 잡아줌 string path = Application.persistentDataPath + "/Diablo_data.json"; Debug.Log(path); File.WriteAllText(path, serializedJson); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Diablo_Data { public int id; public string name; public int minpower; public int maxpower; public string type; //추가된 내용 public Diablo_Data(int minpower, int maxpower) { this.minpower = minpower; this.maxpower = maxpower; } }
Diablo_Data info = new Diablo_Data(data.minpower, data.maxpower);
역직렬화와 마찬가지로 직렬화 역시 직렬화 객체를 먼저 생성해준다
public Diablo_Data(int minpower, int maxpower)
{ this.minpower = minpower; this.maxpower = maxpower; }우선 Diablo_Data 형식으로 2개의 매개변수를 받아야하니 바로 밑에 위치한 코드에서 하나의 메서드를 추가해준다
string serializedJson = JsonConvert.SerializeObject(info);
그리고 직렬화를 해준다
어떻게보면 직렬화와 역직렬화가 이루어지는 코드는 거의 비슷하다고 볼수 있다
<직렬화>
Diablo_Data info = new Diablo_Data(data.minpower, data.maxpower);
string serializedJson = JsonConvert.SerializeObject(info);
<역직렬화>
Diablo_Data data = JsonConvert.DeserializeObject<Diablo_Data>(json);
Debug.LogFormat("=> {0}, {1}, {2}, {3}, {4}", data.id, data.name, data.minpower, data.maxpower, data.type);이제 여기서 한가지를 더 추가해 파일에 저장하는것까지 한번 배워보자
string path = Application.persistentDataPath + "/Diablo_data.json";
1. string 형식의 변수 path에 값을 넣어준다
2. Application.persistentDarapath : 플랫폼 os에 따라 경로를 자동으로 잡아줌3. "/Diablo_data.json"; 이 파일 이름으로 저장하겠다
즉 path에 Diablo_data.json의 이름으로 저장된 파일을 os에 따라 경로를 잡아준 값을 넣겠다는 의미이다
Debug.Log(path);
path를 출력하면 정말 위의 이름으로 저장된 파일의 위치가 출력된다
File.WriteAllText(path, serializedJson);File.WriteAllText 메서드는 기능이 뭐였는지 정확히 생각이 안나 찾아보니
라고 한다. 이번 지문에서는 string 형 2개를 집어넣었으니 path파일에 serializedJson을 쓸거라고 이해하면 된다
정말 출력결과에 나온 경로로 따라들어가면 json 형식 문자열 파일이 만들어진것을 볼 수 있다
'유니티 > 유니티 메인' 카테고리의 다른 글
충돌판정 (1) 2024.03.04 가까운 적 찾기 (2) 2024.02.28 json 응용 (0) 2024.02.14 레벨 디자인, Debug.DrawRay, RayCast, RayCastHit (0) 2024.02.07 3D(Terrian, 파티클, Ray 클래스) (1) 2024.02.05