우선 간단하게 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 |