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

1. 화면 중앙의 드롭다운
스크립트를 통해 언어 옵션에 따라 항목 표시를 채워넣는 초기화를 진행하고 있었으나
터치했을 때 잠시 Pressed 색상이 뜨는 것으로 보아 이벤트 시스템 쪽 문제는 아니라 판단했습니다.
2. 번역이 되지 않음
로컬라이징 매니저의 로직에 따라
첫 실행 시 시스템 언어에 따라 초기 설정이 되어 나와야 하나,
중앙의 Select Region이 한글로 번역되어 나오지 않았습니다.


번역문을 집어넣어야 할 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 |