유니티 로컬라이제이션 (1) - UI 상의 적용
현재 제작 중인 게임의 전체적인 구조는 다 잡힌 상태로, 텍스트 데이터의 관리 및 종류 또한 어느 정도 확립된 상태이다.따라서 처음 예정했던 영어, 일본어의 언어 지원을 위한 로컬라이제이
toacode.tistory.com
관련된 이전 포스팅
앞서 다뤘던 내용처럼 로케일 변경에 따른 UI 상의 언어 변경은, 단순히 Key값 등록과 각 대응 언어와 문장 등록만으로도 구현자체는 가능하지만, 같은 뜻도 언어가 다를 경우 길이와 폰트의 크기가 다를 시 발생하는 여러 문제가 생길 수 있다.
따라서, 로케일 값에 따른 언어가 바뀔 때 따라서 같이 폰트 + 폰트의 크기를 조정해 주는 작업이 따라와 주어야 자연스럽게 보이게 되는 것이다.
만약 별도의 조정 없이 그대로 적용하여 실행하게 된다면.
1. 특정 언어가 등록되지 않은 폰트의 경우 □□□□□□□□처럼 글씨가 깨져 보이고.
2. 특정 언어를 등록하여도 언어 변경 시 기존에 상정한 UI범위를 벗어나는 텍스트를 보게 되는 것이다.
위의 사진처럼 글씨가 한 줄에 다 표시되지 않고 다음 줄까지 이어지게 되어 가독성이 나빠질 수 있다.
이러한 문제를 해결하기 위해서 어떠한 작업을 거쳤는지 기록을 하기 위해 글을 작성한다.
먼저 해결해야 하는 문제점은 크게 2가지이다
1. 언어별 지원하는 폰트로 변경
2. 언어 + 폰트 변경 시 폰트의 크기 변경
먼저 언어별 지원 폰트부터 시작해 보자
해당 언어를 지원하는 폰트를 생성 시 받는. ttf 파일에서 유니티의 Font Asset Creator를 통해 생성하는 과정은 동일하지만
언어별 폰트 에셋 생성 캐릭터 시퀀스 범위를 주의해야 한다.
참고로 언어별 캐릭터 시퀀스의 유니코드 범위는 아래의 링크에서 찾을 수 있다.
변수에서 지원되는 유니코드 범위
docs.automationanywhere.com
만약 폰트를 생성 시 캐릭터 시퀀스 범위를 정확히 기재하지 않고 만들면 문제가 생길 수 있다.
Ex ) 일본어의 경우 히라가나, 가타카나, 한자 3개의 시퀀스 범위를 등록해주어야 함. 만약 하나라도 빼먹는다면 해당하는 범위의 텍스트는 글씨가 깨져서 □□ □□ □□ 이렇게 보이게 된다.
따라서 정확히 언어별 시퀀스를 다 포함하여 아래와 같이 넣어주고 생성하면 정상적으로 작동하는 폰트를 만들 수 있다.
이후 언어 변경 시 폰트 적용의 경우, 간단한 방법으로 구현하였다.
전체 UI에서 동일한 폰트를 사용하되, 만약 해당 폰트에서 지원하지 않는 언어를 쓸 경우, Fallback의 폰트를 사용하게 하는 방법으로. 메인으로 사용할 폰트를 클릭 후, 인스펙터상의 하단의 Fallback Font Asset에 등록시켜 주면 된다.
이렇게 언어별 바뀔 폰트 설정을 마친 다음 언어가 바뀌게 되면 UI상의 폰트의 크기도 적절하게 변경이 될 수 있게 해 주어야 자연스러운 UI를 만들 수 있다.
이를 위해서는 로컬라이제이션의 로케일 값이 바뀌면 따라서 폰트의 크기를 바꿔주는 스크립트를 만들어서 UI의 컴포넌트로 넣어 주어야 한다.
[RequireComponent(typeof(TMP_Text))]
public class LocalizedFontSizeAdjuster : MonoBehaviour
{
public float fontSize_EN;
public float fontSize_KO;
public float fontSize_JA;
private TMP_Text _text;
void Awake()
{
_text = GetComponent<TMP_Text>();
}
void OnEnable()
{
LocalizationSettings.SelectedLocaleChanged += OnLocaleChanged;
ApplyFontSize(LocalizationSettings.SelectedLocale);
}
void OnDisable()
{
LocalizationSettings.SelectedLocaleChanged -= OnLocaleChanged;
}
private void OnLocaleChanged(Locale locale)
{
ApplyFontSize(locale);
}
private void ApplyFontSize(Locale locale)
{
string code = locale.Identifier.Code.ToLower();
switch (code)
{
case "ko":
_text.fontSize = fontSize_KO;
break;
case "ja":
_text.fontSize = fontSize_JA;
break;
default:
_text.fontSize = fontSize_EN;
break;
}
}
}
위와 같은 스크립트를 작성한 뒤, 이전 포스팅에서 Localize String Event와 같은 위치에 add Component로 등록 + 원하는 폰트 크기를 적절히 넣어주면 된다.
이렇게 설정해 주면, 로케일 값이 바뀌면, 이곳에 지정해 준 폰트 값이 따라 변경이 되어 자연스러운 크기가 유지된다.
언어 변경 시 바뀐 폰트 적용 + 폰트 크기 변경 세팅을 완료해 준 뒤 실제 적용모습이다.
정상적으로 언어 변경이 적용되며, 소피아 텍스트가 크기에 벗어나지 않도록 폰트의 사이즈가 조정된 모습을 볼 수 있다.
이어지는 내용
유니티 로컬라이제이션 (3) - CSV 데이터 로컬라이제이션
유니티 로컬라이제이션 (1) - UI 상의 적용현재 제작 중인 게임의 전체적인 구조는 다 잡힌 상태로, 텍스트 데이터의 관리 및 종류 또한 어느 정도 확립된 상태이다.따라서 처음 예정했던 영어, 일
toacode.tistory.com
'C# > 게임 제작 + TIL' 카테고리의 다른 글
유니티 로컬라이제이션 (3) - CSV 데이터 로컬라이제이션 (3) | 2025.07.09 |
---|---|
유니티 로컬라이제이션 (1) - UI 상의 적용 (0) | 2025.07.02 |
유니티 애널리틱스 (0) | 2025.06.11 |
유니티 에디터 (0) | 2025.05.09 |
유니티 에디터 윈도우 (1) | 2025.04.30 |