모바일 빌드 시, JSON 파일을 읽어오지 못하는 문제

2026. 1. 11. 09:28·Unity 에러 노트

에디터, PC 빌드에서는 잘 작동하던 드롭다운이 먹통이 되는 문제가 생겼습니다.

 

<< 문제 인식 및 분석 >>

1. 화면 중앙의 드롭다운

스크립트를 통해 언어 옵션에 따라 항목 표시를 채워넣는 초기화를 진행하고 있었으나

터치했을 때 잠시 Pressed 색상이 뜨는 것으로 보아 이벤트 시스템 쪽 문제는 아니라 판단했습니다.

 

2. 번역이 되지 않음

로컬라이징 매니저의 로직에 따라

첫 실행 시 시스템 언어에 따라 초기 설정이 되어 나와야 하나,

중앙의 Select Region이 한글로 번역되어 나오지 않았습니다.

 

안드로이드 : 언어 번역이 되지 않고 개발 중이던 그대로 출력
PC : 한글 옵션으로 제대로 실행

 

번역문을 집어넣어야 할 TMP_Text, TMP_DropDown 이 둘이 번역이 되지 않은 상태로 먹통이 된 상황이네요.

 

확인해보니,

번역문을 제대로 불러오지 못해

해당 데이터를 담을 딕셔너리가 비어있고

이로 인해 데이터 수가 0개로 나와 드롭다운 항목 초기화 실패로 이어졌습니다.

 

 

<< 조치 >>

    // 설정에 맞는 언어 파일을 읽어들여 localizedText 딕셔너리에 정리
    // >> 언제든 효율적으로 찾을 수 있도록
    public IEnumerator LoadLanguage()
    {
        //문자열 더하기 대신 쓰는 이유
        //플랫폼에 따라 경로 사이에 / or \ 가 다르게 붙기에 해당 메서드로 안전하게 파일 경로를 만들 수 있음
        string path = Path.Combine(Application.streamingAssetsPath, fileName);

        // File.ReadAllText(path)로는 안드로이드에서는 APK 내부 에셋에 접근 불가
        // 해당 Json 파일이 StreamingAssets 폴더 내에 있기에 무조건 UnityWebRequest로 읽어야 함

        // using = 자동 리소스 정리. 내부적으로 IDisposable.Dispose() 호출
        // UnityWebRequest는 네이티브 리소스, 네트워크 핸들, 메모리 버퍼를 들고 있기에 명시적 해제가 중요 >> 해주지 않으면 메모리 누수 발생
        using (var request = UnityEngine.Networking.UnityWebRequest.Get(path))
        {
            // 요청이 완료될 때까지 대기
            yield return request.SendWebRequest();

            // 파일 경로로부터 읽지 못했다면, 에러 메시지와 함께 불러오기 종료
            if (request.result != UnityEngine.Networking.UnityWebRequest.Result.Success)
            {
                Debug.LogError($"Localization load failed: {request.error}\nPath: {path}");
                yield break;
            }

            string json = request.downloadHandler.text;
            LocalizationFile file = JsonUtility.FromJson<LocalizationFile>(json);

            localizedText = new Dictionary<string, LocalizedValue>();
            foreach (var item in file.items)
            {
                localizedText[item.key] = item.value;
            }
        }
        // 여기서 자동으로 request.Dispose() 호출


        // 기존 : File.ReadAllText(path)로 읽어옴
        // string json = File.ReadAllText(path);
        //LocalizationFile file = JsonUtility.FromJson<LocalizationFile>(json);
        //localizedText = new Dictionary<string, LocalizedValue>();
        //foreach (var item in file.items)
        //{
        //    localizedText[item.key] = item.value;
        //}
    }

 

APK 파일로 빌드하면서 압축 과정을 거치는데,

그로 인해 직접 해당 경로에 접근할 수 없었던 게 문제의 직접적인 원인이었습니다.

 

따라서, 경로에 접근하는 방법을 바꾸어야 했습니다.

 

기존 : File.ReadAllText();

수정 : UnityWebRequest

 

<< 결과 >>

모바일 빌드로 제대로 번역본이 출력됨을 확인

 

 

<< 안드로이드 테스트 빠르게 하기 >>

1. Unity Remote

테스트 속도를 빠르게 하기 위해 알아보았으나,

에디터 2022 버전 이후 미지원 + 최신 모바일 기기 미지원 이슈로 인해 해당 방법은 사용하지 못했습니다.

 

2. 앱 플레이어

기존에는 

PC에서 빌드 → 안드로이드로 APK 파일 이동 → 설치 → 테스트

옮기는 과정을 거쳐야 했지만,

 

PC에서 가상 모바일 환경으로 APK 파일 설치 및 구동이 가능한 앱 플레이어를 통해

 

PC에서 빌드 → 앱 플레이어로 설치 → 테스트

 

절차를 줄여 보다 빠르게 테스트하는 방법도 배웠습니다.

물론 정상 구동 후 모바일에서 테스트하는 것도 잊지 맙시다.

저작자표시 비영리 동일조건 (새창열림)

'Unity 에러 노트' 카테고리의 다른 글

GetComponentsInChildren<T>() 을 사용할 때 주의할 점  (0) 2024.11.26
TextMeshPro 텍스트에 반투명한 네모가 나타날 때  (0) 2024.11.20
게임 오브젝트 비활성화 후 다시 활성화 시 애니메이터 파라미터 값 초기화  (0) 2024.10.01
매뉴얼에서 알려주지 않은 코루틴 WaitForSeconds()의 매개변수 t에 대해  (0) 2024.04.15
유니티) 갤럭시 s24 시리즈와의 앱 호환성 문제  (0) 2024.03.12
'Unity 에러 노트' 카테고리의 다른 글
  • GetComponentsInChildren<T>() 을 사용할 때 주의할 점
  • TextMeshPro 텍스트에 반투명한 네모가 나타날 때
  • 게임 오브젝트 비활성화 후 다시 활성화 시 애니메이터 파라미터 값 초기화
  • 매뉴얼에서 알려주지 않은 코루틴 WaitForSeconds()의 매개변수 t에 대해
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체
      • 스파르타코딩클럽_Unity개발과정
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
        • Inkoid
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    세이브
    텍스트매시프로
    무료스킨
    hello
    sprite mask
    unity
    룰렛
    마스크
    잔상
    삭제
    갤럭시 S24
    대시
    다크모드
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    유니티
    64비트
    직렬화
    스파인
    유니티 애니메이터 파라미터 초기화
    UI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
모바일 빌드 시, JSON 파일을 읽어오지 못하는 문제
상단으로

티스토리툴바