Unity3D에 쓸만한 JSON C# lib 뭐가 있을까? LitJson

 지난번에는 cocos2d-x에서 사용할만한 JSON C++ lib를 리서치했었습니다. 이번에는 Unity3D에서 사용할 JSON C# lib를 리서치해봅니다.

C#:
 역시나 JSON 홈페이지에는 위와같은 링크들이 있습니다. 이중에서 LitJSON에 대해 정리해봅니다.


 이미 상용화된 프로젝트에도 사용이 되었네요. 에어헌터 for Kakao를 만드신 분의 블로그에 LitJson 소개와 간단 사용법 이라고 정리가 되어있습니다. 즉, 유니티3D에서 iPhone과 Android용으로 적용이 가능하다는 말이죠.

 설치는 간단합니다. LitJSON 공식홈페이지에서 최신버전인 litjson-0.7.0을 다운받으셔도 되고 LitJSON의 GitHub에서 받으셔도 됩니다. 그리고 압축해제 후 bin 디렉터리에 있는 LitJson.dll을 스샷과 같이 Assets\Plugins 안에 복사해줍니다.

 유니티3D에서 JSON을 쓸만한 곳은 어디가 있을까요? 여러가지 유용한 부분이 있겠지만 저는 안드로이드와 유니티3D 통신할 때 사용했던 UnityPlayer.UnitySendMessage의 3번째 인자 때문에 일단 사용하게 되었습니다. 3번째인자로 String뿐이 보낼 수 없으니까요. 페이스북 연동시 친구 리스트를 처리해야하는데 친구 한명한명 보낼수는 없자나요. 그래서 JSON으로 처리하게되었습니다. 관련한 샘플 소스를 보시면,

Java
JSONArray jsonArr = new JSONArray();

for (GraphUser user : users) {
 Log.d("UnityFacebookTest", user.getName() + " " + user.getId());
 try {
  JSONObject jsonObj = new JSONObject();
  jsonObj.put("FacebookId", user.getId());
  jsonObj.put("Name", user.getName());
  jsonArr.put(jsonObj);
 } catch (JSONException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}

UnityPlayer.UnitySendMessage("FacebookManager", "ResultFriends_J", jsonArr.toString());

C#
using LitJson;

public void ResultFriends_J(string jsonFriends)
{
 JsonData jData = JsonMapper.ToObject(jsonFriends);
 for (int i = 0 ; i < jData.Count ; i++)
 {
  string strFacebookId = jData[i]["FacebookId"].ToString();
  string strFacebookName = jData[i]["Name"].ToString();
  Debug.Log("Friend id " + strFacebookId + " Name " + strFacebookName);                                                                      
 }
}

 간단합니다. 안드로이드에서 페이스북 친구들의 id와 name을 JSONObject로 만들어 JSONArray에 add를 다 한후 유니티에 보냅니다. 유니티에서는 LitJson에 있는 JsonMapper와 JsonData를 사용해서 간단히 로그로 출력해봤습니다.

 안드로이드에서 출력해본 로그입니다. 잘 되네요. 아이폰은 아직 작업환경이 아니라 테스트해보진 않았지만, 상용프로젝트에서도 잘 된다니 잘되겠죠?

LitJSON Quickstart Guide를 참고하시면 더 다양한 샘플을 확인할 수 있습니다.

댓글

이 블로그의 인기 게시물

CMake Windows에 설치하기

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

크로스 스레드 작업이 잘못되었습니다. xxx 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다