유니티 엔진에서 json 사용하기.



우선 유니티를 실행.



Asset Store를 열고



검색어로 json을 입력하여 검색




JSON .NET for Unity 를 찾아서 클릭




에셋을 다운로드 하고



불러오기를 눌러서 프로젝트에 추가



프로젝트에 추가가 완료되면

JsonDotNet이라는 폴더가 생성되어 있을 것이다.



간단한 스크립트를 만들어서 테스트 해보면 된다.

스크린샷은 여기까지만 사용하고 아래에 나올 코드를 참고하도록 하자.

해당 json 라이브러리에 대한 자세한 설명은 newtonsoft 공식 홈페이지를 참조 할 것.

간단한 설명은 에셋을 받으면서 생긴 "JsonDotNet" 폴더 안에 Documentation 폴더에 pdf 파일 참조.

주로 사용할 법한 내용만 요약하는게 이 글의 목적이다.




using System.IO;
using System.Collections.Generic;

using UnityEngine;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class JsonSaveLoad : MonoBehaviour
{
    public void Save()
    {
        //  key-value 사용
        JObject savedata = new JObject();       //  JObject 인스턴스 생성
        savedata["key-name"] = "value-data";    //  key-value 삽입
        savedata["anyname"] = 1f;               //  int, float, string
        savedata["is-save"] = true;             //  bool 등 다양한 자료형 사용 가능

        //  json에서 배열 사용하기
        JArray arraydata = new JArray();        //  JArray 인스턴스 생성
        for (int i = 0; i < 5; i++)
        {
            //  랜덤한 값을 추가한다.
            //  C++에서 사용하는 vector의 push_back과 같다고 보면 된다.
            arraydata.Add(Random.Range(0.0f, 10.0f));
        }
        savedata["arraydata"] = arraydata;      //  위에서 만든 JArray를 대입.

        //  다른 방법으로 JArray 사용하기
        savedata["newarr"] = new JArray();      //  새로운 key에 value로 JArray 할당.
        for (int i = 0; i < 5; i++)
        {
            ((JArray)savedata["newarr"]).Add(Random.Range(0, 50));  //  JArray 변수를 만들어서 축약 가능
        }

        //  json 형식을 value로 사용하기
        savedata["parent"] = new JObject();     //  key를 지정하고 value에 new JObject()를 대입.
        savedata["parent"]["child1"] = 123;
        savedata["parent"]["child2"] = 456;
        
        //  class를 json으로 변환하기
        SaveData s = new SaveData();    //  인스턴스화 시키고 적당히 데이터를 입력.
        s.id = 0;
        s.namelist.Add("komastar");
        s.namelist.Add("kintaro");
        savedata["class-savedata"] = JToken.FromObject(s);  //  파싱.
        
        //  파일로 저장
        string savestring = JsonConvert.SerializeObject(savedata, Formatting.Indented);     //  JObject를 Serialize하여 json string 생성
        File.WriteAllText(Application.persistentDataPath + "/savedata.json", savestring);   //  생성된 string을 파일에 쓴다
    }

    public void Load()
    {
        //  불러오기는 저장의 역순
        string loadstring = File.ReadAllText(Application.persistentDataPath + "/savedata.json");    //  string을 읽음
        JObject loaddata = JObject.Parse(loadstring);   //  JObject 파싱

        //  key 값으로 데이터 접근하여 적절히 사용
        Debug.Log("key-value 개수 : " + loaddata.Count);

        Debug.Log("----------------------------");
        
        Debug.Log(loaddata["class-savedata"]);

        Debug.Log("----------------------------");

        JArray loadarray = (JArray)loaddata["arraydata"];
        for (int i = 0; i < loadarray.Count; i++)
        {
            Debug.Log(loadarray[i]);
        }

        Debug.Log("----------------------------");

        foreach (var item in loaddata["newarr"])
        {
            Debug.Log(item);
        }

        Debug.Log("----------------------------");

        Debug.Log(loaddata["newarr"]);
    }
}

public class SaveData
{
    //  변수 이름이 key값으로 사용된다.
    public int id;

    [JsonProperty("name-list")]     //  프로퍼티 이름을 지정하면 변수 이름 대신 key값으로 사용된다.
    public List namelist;   //  "namelist" : {} 대신 "name-list" : {} 으로 사용됨.

    public SaveData()
    {
        id = 0;
        namelist = new List();
    }
}

/*
{
    "key-name": "value-data",
    "anyname": 1.0,
    "is-save": true,
    "arraydata": [
        3.138103,
        6.43384361,
        0.0607228279,
        5.9034543,
        6.343808,
        0.208146572,
        6.17789,
        8.661151,
        9.782631,
        4.389159
    ],
    "newarr": [
        0,
        29,
        0,
        34,
        26
    ],
    "parent": {
        "child1": 123,
        "child2": 456
    },
    "class-savedata": {
        "id": 0,
        "name-list": [
            "komastar",
            "kintaro"
        ]
    }
}
*/

'Programming > Unity3D' 카테고리의 다른 글

Unity에서 JSON 사용하기 ( unity for json )  (1) 2018.07.12
  1. 박찬혁 2018.09.27 16:27

    감사합니다 ^^ 잘 쓰겠습니다


처음 써보는 영화 후기


2018. 7. 4. 앤트맨과 와스프 2018 영화 관람.


글쓴이는 마블 영화와 에이전트 오브 실드 정도를 보는 덕찌끄래기임을 먼저 밝힙니다.


영화가 시작되고 초반 10분 이상을 자막만 보면서 귀를 기울였다. 밝은 분위기의 도입부라서 긴장감과 몰입도가 부족해서 그런지


번역을 안한 부분 혹은 잘 번역한 것 같은데 더 좋은 번역은 없었나? 하는 생각이 머리를 가득 메웠다.


조금씩 내용이 진행되면서 자연스럽게 몰입을 하게 되었고 어느 순간 자막에 신경 쓰던 나의 긴장감은 해소 되었다.


"어벤져스 : 인피니티 워 2018"의 "어머니" 때문에 영화 초반을 즐기지 못한게 아쉽지만 떨쳐내고 즐겼으면 되는 것이기에 난 내 성격을 탓한다.


일단 내용 자체만 봤을때 매우 앤트맨 그 자체에 치중했다.


스크린X를 염두한 영화라는게 확실하게 느껴지는 장면이 많다.


2D로 봐도 문제 없겠지 하는 생각에 2D로 봤지만 보고나서 스크린X로 볼걸 하고 조금 아쉽게 느껴진다.


마블 영화만 본 내 입장에선 "어벤져스"와 연결 고리는 눈에 띄지 않았다.


그리고 솔직히 매우 재밌어서 강력 추천! 할 영화는 아니다. "앤트맨 2015"를 봤다면 배경 설명을 해주고 약간의 메시업을 해주는 영화 같다.


두번째 시리즈가 이정도로 나왔고 차기작이 나와서 깔끔하게 3부작 마무리를 했으면 한다.


쿠키 영상은 총 2개.


개인적으로 쿠키2개 보는데 7천원 정도 써도 전혀 아깝지 않다고 생각한다.


적당히 쓰고 보니 너무 횡설수설.


일단 여기서 마무리.

'Review > Movie' 카테고리의 다른 글

앤트맨과 와스프 2018 후기 (쿠키는 2개)  (0) 2018.07.04

Photo by Komastar


2016. 10. 04

광운대 축제 #5

홍진영 갓데리 밧데리 홍블리 hongjinyoung hongvely

고화질 hq hd 직찍




Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-500 | Off Compulsory | 2016:10:04 18:56:29

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-500 | Off Compulsory | 2016:10:04 18:56:30

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-640 | Off Compulsory | 2016:10:04 18:57:51

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-640 | Off Compulsory | 2016:10:04 18:57:51

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-500 | Off Compulsory | 2016:10:04 18:57:51

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-500 | Off Compulsory | 2016:10:04 18:57:51

Canon | Canon EOS 5D Mark IV | Manual | Pattern | 1/800sec | F/2.8 | -1.00 EV | 200.0mm | ISO-640 | Off Compulsory | 2016:10:04 18:57:52


  1. 2018.07.02 23:15

    비밀댓글입니다

  2. timeline20 2018.07.02 23:15

    역시 갓데리 아름다우시네요;;ㅎㅎ

+ Recent posts