본문 바로가기

유니티/에러 리포트

[Unity] json mobile save and load in unity

반응형

유니티 모바일 환경에서 json 파일을 저장 불러오기 하면 Null 에러가 발생하는 문제가 생겼다.

분명히 파일에 json파일이 존재하고 에디터 환경에서 실행하면 잘 동작하는데 뭐가 문제인가...

[ContextMenu("UI Data To Json")]
string jsonData = JsonUtility.ToJson(UIDatas, true);
if (!Directory.Exists(Application.dataPath + m_path))
    Directory.CreateDirectory((Application.dataPath + m_path));
string totalPath = Path.Combine(Application.dataPath + m_path, m_name);
File.WriteAllText(totalPath, jsonData);

[ContextMenu("UI Data From Json")]
TextAsset ta = Resources.Load<TextAsset>("Jsons/" + m_name);
UIDatas = JsonUtility.FromJson<UIData>(ta.ToString());

 

2시간의 수고 끝에 어이없는 이유를 찾아내었다.

 

바로 확장자명이 없었다는 것....

TextAsset으로 불러들이려면 확장자명이 .json인 것들을 찾아내야 하는데

로그를 찍어보니 그 어떠한 파일도 읽어들이지 못하고 있었다.

따라서 파일명에 .json을 추가해주어야 한다.

string jsonData = JsonUtility.ToJson(UIDatas, true);
if (!Directory.Exists(Application.dataPath + m_path))
    Directory.CreateDirectory((Application.dataPath + m_path));
string totalPath = Path.Combine(Application.dataPath + m_path, m_name);
File.WriteAllText(totalPath + ".json", jsonData);

 

그러나 파일을 저장하고 에디터에서 refresh를 계속해도 json 파일이 보이지 않았는데...

 

그 이유인즉슨, Resources폴더 내부에서 경로가 시작하는 Resources.Load와는 다르게 Application.dataPath는 Asset폴더를 포함한 경로부터 시작하기 때문.

 

따라서 m_path를 path1/path2/dataFile.json이 아닌 /path1/path2/dataFile.json 로 변경해 주어야 원하는 결과를 얻을 수 있다.

 

반응형