유니티/유니티 공부

직렬화를 이용하여 저장 객체 저장

DOlpa_GB 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 클래스)  (2) 2024.02.05