2017년 2월 21일 화요일

Unity3D 용 Json Parser - JsonUtility(Unity3D 5.3 Later), JsonObject

Unity3D로 Json 파일을 좀 사용할 일이 있어서 알아보았다.

그 동안 기획일 하면서 데이터만 만들었지,
직접 뭔가를 해볼일은 없었는데 이참에 해보는 것으로...

-------------

Unity3d Json Parser를 검색해보면

- JsonFX (가장 편하다는 평인데, 사이트 접속 불가. DLL 은 구했지만 스킵.)
- LitJson (iOS 이슈 게시물이 상당히 많다.. 위험)
- MiniJson (EastFever 님의 추천!!)
- JsonObject (직접 테스트 해본 것. 문제 없음)

등이 나오는데

일단은 JsonObject 를 사용해봤다.
이유는 Unity3D Asset Store에 등록되어있는데다가 무료고,
다들 잘 사용하고 있는 것 같아서 선택했다.

다운로드 및 레퍼런스 위키는 아래 주소에서 확인 가능하다.
http://wiki.unity3d.com/index.php/JSONObject#Download

나는 간단하게 읽고 쓰기만 할 생각이라서 뭐 다른건 지원된다고 해도 그러려니 상태였다.!
당연히 유니티 5.5에서도 문제 없었기에 이걸로 써야지~ 하고 결정!!!


-------------


그.. 그런데... 두둥!
조금 더 알아보다 보니,

유니티 5.3 부터 JsonUtility 라는 내장 API 가 생긴 것이다. 두두둥..!!

(몰랐다니, 아니 대수롭지 않게 보고 흘려서 까먹은듯,
릴리즈 블로그 읽기를 소홀히 한 제 탓입니다. T_T)

그래서 바로 쓱쓱 테스트 !!!

일단 레퍼런스 문서를 보자.
https://docs.unity3d.com/ScriptReference/JsonUtility.html


# ToJson 사용 방법 (코드 예제)


using UnityEngine;

[System.Serializable]
public class MyJsonClass
{
    // 사용할 Json Key 를 정의
    public int level;
    public float timeElapsed;
    public string playerName;

}

public class JsonUtilityTest : MonoBehaviour {

    private void WriteJSon() {
        MyJsonClass myObject = new MyJsonClass();
        myObject.level = 5;
        myObject.timeElapsed = 14.75f;
        myObject.playerName = "Kpaper ToJson Test";

        string json = JsonUtility.ToJson(myObject);
        Debug.Log(json);
    }
}

# FromJson 사용 방법. (더 자세한 내용은 위의 레퍼런스 사이트보면 잘 나와 있다.)


JsonUtility.FromJson<MyJsonClass>(json);

------

딱 내가 원하는 것만 간단하게 쓸 수 있어서 좋았다.
손쉽게 시리얼라이즈!

아무래도 엔진에 종속되서 개발을 하다 보니,
외부 에셋을 쓰기 보다는 내장된게 좋을 것 같아서 방향 선회!를 하는 것으로 결론...

끝!

P.S : 교훈. 멀리서 찾지 말자 -_-;;;

-----------------------------------------------------

[내용 업데이트]

으헉!!
JsonUtility는 Json 타입 중 Property Type 에는 사용할 수 있는데, Dictionary Type 은 사용할 수 없다.

구글 선생님한테 물어봐도 고통, 포럼 유저들도 다 같이 고통 중이었다.
(언젠간 업데이트 되지 않을까 하고 헛된 희망을 가져봤다.)

하지만 계속 구글링 해본 결과, 다행히 구글 선생님은 일본 블로그 하나를 추천해주셨다.
http://kou-yeung.hatenablog.com/entry/2015/12/31/014611
(杏仁さん、ありがとうございます。 T_Td)

ISerializationCallbackReceiver 를 이용하는 방법이다.

이걸로 거의 해결! (왜 거의인지는 나중에 다시 포스팅 하겠다. ㅜㅜ)

P.S 2 : 그냥 평범하게 선구자분들에게 추천 받은 것으로 할 걸, 왜 그랬을까. ㅠ_ㅠ...

<끝>

댓글 없음:

댓글 쓰기