ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 직렬화를 이용하여 저장 객체 저장
    유니티/유니티 메인 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
Designed by Tistory.