https://docs.unity3d.com/Packages/com.unity.localization@1.0/manual/index.html
현지화 번역에 대해서 유니티가 지원해주는 패키지.
차근차근 읽어보면 사용하기 쉽다. 간단하게 설명하면 Addressable 을 이용해서
위와 같은 String, Sprite, Texture, AudioClip, Prefab 을 바꿔치기해준다.
String Table Collection 을 만들어서 번역을 원하는 Text 에 일일히 글자를 넣어주면 된다.
(TextMeshPro 의 경우 당연히 지원이 되는 Font 를 넣어줘야 한다.)
그리고 Addressable을 이용해서 가져와서 사용하는 '무언가' 가 있다면 Addressable Build 를 해줘야 한다.
그리하여 Text 는 문제없이 작동하는 것을 확인할 수 있었지만, 문제는 Asset Table Collection 에서 발생한다.
기본적으로 Unity 에서 지원해주는 Localization 은 바꿔줄 Table 안에 넣어준 값(String, Sprite, Texture, AudioClip, Prefab ..)들을 'Preloading 해놓지 않는다.' 라고 메뉴얼에 설명이 되어있다. 즉, 바꿔주겠다 라고 선택을 하는 순간 한번에 로딩을 해서 가져오도록 되어있다. 하지만 Preloading 을 할 수 있도록 기능을 만들어 두었는데
이것이 문제였다.
Assertion failure 검색해도 잘 안나온다.
Value was not Null 값이 있다네 자꾸
https://docs.unity3d.com/ScriptReference/Assertions.Assert.IsNotNull.html
public SharedTableData.SharedTableEntry SharedEntry
{
get
{
if (m_SharedTableEntry == null)
{
Assertions.Assert.IsNotNull(Table);
m_SharedTableEntry = Table.SharedData.GetEntry(KeyId);
}
return m_SharedTableEntry;
}
}
안에 들어가보면 Table 에 값이 비었는지 안비었는지 알려주는 경고메세지가 있다.
이것 때문에 한번만에 안바뀌고 자꾸 경고를 뱉어서, 다른 Localization 으로 SetLocale 해주고 돌아와야 비워놓고 경고를 뱉지 않는다.
하루를 걸쳐 찾고 찾아서 기록해둔다.
위에 Preloading 을 다 해제 해주고 빌드를 하니 다 잘 된다.
'Unity' 카테고리의 다른 글
[Unity] 게임오브젝트 투명하게 만들기 (0) | 2022.05.25 |
---|---|
[TextMeshPro] Dynamic Font Asset Creation Process (2) | 2022.05.25 |
[Unity] 여러문자로 Split 하기 (0) | 2021.07.08 |
[Unity] 구글 앱버전 파싱 코드 (0) | 2021.06.18 |
[Unity/C#] delegate, Action , Func / event (0) | 2021.06.18 |