일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 터치디자이너 인터페이스
- 터치디자이너 클론
- TDableton
- 터치디자이너 참조
- particleGPU
- 터치디자이너 함수
- 터치디자이너 reference
- TouchDesigner
- 터치디자이너 Instancing
- 터치디자이너 강의
- displace
- 터치디자이너 에이블톤
- 터치디자이너 if
- 터치디자이너 interface
- 터치디자이너 파이썬
- touchdesigner displace
- 터치디자이너 list
- 파이썬
- 파이썬 if
- 파이썬reference
- 터치디자이너 튜토리얼
- 터치디자이너 timeline
- touchdesinger
- touchdesigner particle
- 터치디자이너 python
- 터치디자이너
- touchdesigner GPU
- 터치디자이너 오퍼레이터
- ableton live 10
- 터치디자이너 replicator
- Today
- Total
caLAB
[유니티 개발] Json 본문
Json은?
서버와 클라이언트 사이에 데이터를 주고 받는 것에 대한 약속
json은 주석 사용을 하지 못하고 형식이 틀리면 바로 인식을 못하기 때문에 까다로움으로 구글에 'Json 검사기'를 찾아서 자신이 작성한 Json이 올바른지 점검이 필요하다. Json 파일이 깨졌는지 아닌지 확인 가능함.
유니티에서 Json을 사용하는 방법에는 여러가지가 있는데.
NewtonSoft를 사용하는 방법이 있다.
https://github.com/JamesNK/Newtonsoft.Json/releases
newtonSoftware 사용 방법
1. release에서 Json130r1.zip을 다운로드 한 후에 압축을 푼다.
2. Json130r1 / Bin / net45 에서 아래 dll 파일을 유니티 프로젝트로 가져온다.
*에러 해결 방법
1. Project Setting / Player / Other Setting에서 api compatibility level을 .Net 4x로 설정한다.
2. Project Setting / Player / Other Setting / Configuration에서 Assembly Version Validation을 해제한다.
나에게 발생한 에러는 위와 같은 세팅으로 해결해주었다.
본인은 유니티 버전 2020.3.16f1에서 테스트 하였다.
3. 위의 세팅을 맞추면 사용 할 수 있다.
json 값 생성 test 클래스
- json의 기본 값 생성 및 출력 함수
public class JsonTestClass
{
public int i;
public float f;
public bool b;
public string str;
public int[] iArray;
public List<int> iList = new List<int>();
public Dictionary<string, float> fDictionary = new Dictionary<string, float>();
public IntVector2 iVector;
//생성자에서 값을 초기화
public JsonTestClass()
{
i = 10;
f = 99.9f;
b = true;
str = "JSON Test String.";
iArray = new int[] { 1, 1, 2, 3, 5, 8, 12, 21, 34, 55 };
for (int idx = 0; idx < 5; idx++)
{
iList.Add(2 * idx);
}
fDictionary.Add("PIE", Mathf.PI);
fDictionary.Add("Epsilon", Mathf.Epsilon);
fDictionary.Add("Sqrt(2)", Mathf.Sqrt(2));
iVector = new IntVector2(3, 2);
}
public void Print()
{
Debug.Log("i = " + i);
Debug.Log("f = " + f);
Debug.Log("b = " + b);
Debug.Log("str = " + str);
for (int idx = 0; idx < iArray.Length; idx++)
{
Debug.Log(string.Format("iArray[{0}] = {1}", idx, iArray[idx]));
}
for (int idx = 0; idx < iList.Count; idx++)
{
Debug.Log(string.Format("iList[{0}] = {1}", idx, iList[idx]));
}
foreach (var data in fDictionary)
{
Debug.Log(string.Format("iDictionary[{0}] = {1}", data.Key, data.Value));
}
Debug.Log("iVector = " + iVector.x + ", " + iVector.y);
}
//직접 생성한 class의 경우 system.serializable 속성을 붙여줘야
//json으로 변환 가능함
[System.Serializable]
public class IntVector2
{
public int x;
public int y;
public IntVector2(int x, int y)
{
this.x = x;
this.y = y;
}
}
}
json 데이터 직렬화 및 역직렬화
- newtonSoftware 사용 / jsonUtility 사용
- newtonSfotware의 플러그인이 좀 더 다양한 데이터 값 사용 가능.
//NewtonSfotware Json
private void Start()
{
JsonTestClass jTest1 = new JsonTestClass();
//직렬화 - 오브젝트를 json으로 출력
string jsonData = JsonConvert.SerializeObject(jTest1);
Debug.Log(jsonData);
//역직렬화 - json데이터를 오브젝트로 변환
JsonTestClass jTest2 = JsonConvert.DeserializeObject<JsonTestClass>(jsonData);
jTest2.Print();
}
//Json Utility 유니티 내장 Json
private void Start()
{
JsonTestClass jTest1 = new JsonTestClass();
string jsonData = JsonUtility.ToJson(jTest1);
Debug.Log(jsonData);
JsonTestClass jTest2 = JsonUtility.FromJson<JsonTestClass>(jsonData);
jTest2.Print();
}
json 데이터 txt로 저장
using System.Collections;
using System.Collections.Generic;
using System.IO; //입출력
using System.Text;
using UnityEngine;
using Newtonsoft.Json;
public class JsonSave : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
// JSON 데이터 .json 파일로 저장
FileStream stream = new FileStream(Application.dataPath + "/test.json", FileMode.OpenOrCreate);
JsonTestClass jTest1 = new JsonTestClass();
string jsonData = JsonConvert.SerializeObject(jTest1);
byte[] data = Encoding.UTF8.GetBytes(jsonData);
stream.Write(data, 0, data.Length);
stream.Close();
}
}
json 데이터 불러오기
using System.Collections;
using System.Collections.Generic;
using System.IO; //입출력
using System.Text;
using UnityEngine;
using Newtonsoft.Json;
public class JsonLoader : MonoBehaviour
{
void Start()
{
// .json 파일 내용 불러오기
FileStream stream = new FileStream(Application.dataPath + "/test.json", FileMode.Open);
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
stream.Close();
string jsonData = Encoding.UTF8.GetString(data);
JsonTestClass jTest2 = JsonConvert.DeserializeObject<JsonTestClass>(jsonData);
jTest2.Print();
}
}
json 데이터를 C# 클래스로 변환해주는
'Unity > 유니티 개발' 카테고리의 다른 글
[유니티 개발] Game Programming Pattern(SOLID 패턴) (0) | 2022.05.09 |
---|---|
[유니티 개발] 유니티 fireBase연동(이미지 업로드 / 다운로드) (0) | 2022.05.02 |
[유니티 개발] Addressable Asset (0) | 2022.04.25 |
[유니티 개발] 유니티 + 깃허브로 프로젝트 관리 (0) | 2022.04.25 |
[유니티 개발] 직렬화 역직렬화 (0) | 2022.04.21 |