<--! 수학 기호 --> [Unity] 빌드(Build)했을 때, JSON 파일을 읽지 못하는 현상

새소식

반응형
Trouble Shooting/Unity

[Unity] 빌드(Build)했을 때, JSON 파일을 읽지 못하는 현상

  • -

 

 

 

분명 유니티 에디터 상에서 실행했을 때는 JSON 파일을 잘 읽어왔었습니다. 그런데, 빌드만 하면 읽어오지 못하는 문제가 발생했네요... 이것 때문에 2시간은 삽질한 것 같습니다.

 

1. 문제의 JSON 파일 읽어오기 코드

 

using System.IO;
using LitJson;


private const string jsonFilePath = "/Resources/Json/Narration.json";

private JsonData ReadJsonFile()
{
    if(File.Exists(Application.dataPath + jsonFilePath))
    {
        string jsonString = File.ReadAllText(Application.dataPath + jsonFilePath);
        JsonData jsonData = JsonMapper.ToObject(jsonString);
        return jsonData;
    }
    return null;
}

 

JSON 파일이 있는 경로

 

 

위 코드는 분명 에디터에서 실행할 때는 잘 읽어오는 문제없는 코드였습니다. 열심히 이것 저것 찾아본 결과, 유니티의 Assets 디렉토리의 Resources 디렉토리 내부에 있는 파일들을 가져올 때는 Resources 클래스를 사용해줘야 하는 것 같더라구요.

 

 

2. Resources 클래스

 

  • Assets 폴더 내 Resources 이름을 가진 폴더 안의 모든 에셋들은 Resources.Load() 함수를 통해 접근할 수 있다.
  • Resources 폴더는 여러 개가 존재할 수 있으며, 오브젝트를 로드할 시 모두 검사 대상이 된다.
  • 대소문자는 구분하지 않는 것 같다.  (Resources == resources)

 

유니티 공식 문서에 적혀있는 내용입니다. 유니티에서는 보통 에셋에 접근할 때, 경로명보다는 멤버 변수에 참조를 할당하는 방식을 사용하죠. 인스펙터 창에서 공개된 멤버 변수에 오브젝트를 할당하는 것이 그 예시입니다.

이런 식의 할당 방법은 사용되는 에셋들을 자동으로 계산하여 빌드할 때 포함시키는 것 같네요.

 

하지만 Resources 폴더에 에셋들을 넣어두게 되면 위와 같은 방법은 사용할 수 없게 됩니다. 즉, Resources 폴더 내에 있는 에셋들은 별도로 로드를 해주지 않으면 빌드할 때, 포함시키지 않는 것 같습니다. 이 부분을 몰랐기 때문에 버그가 발생한 것 같네요.

 

 

3. 수정한 JSON 파일 읽어오기 코드

 

  • Resources 폴더 다음부터 경로명을 설정
  • 파일 확장자명은 생략
/*  경로명이 Assets/Resources/Json/Narration.json 이라면,  */

private const string jsonFilePath = "Json/Narration";

private JsonData ReadJsonFile()
{
    var jsonTextFile = Resources.Load<TextAsset>(jsonFilePath);
    JsonData jsonData = JsonMapper.ToObject(jsonTextFile.ToString());
    return jsonData;
}

 

 

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.