안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.
이번 시간에는 다국어 UI 시스템을 어떻게 구현할 수 있는지 알아보겠습니다. 특히 Unity에서 TextMeshPro와 Localization 패키지를 이용해, 각 언어별로 적합한 텍스트와 폰트를 자동으로 적용하는 SettingPrefabManager 스크립트를 소개해 드릴게요.
이 스크립트는 다양한 언어로 텍스트를 보여주고, 각 언어에 맞는 폰트를 적용하여 플레이어에게 최적화된 UI 경험을 제공할 수 있도록 설계되어 있어요. 단계별로 필요한 코드와 설명을 함께 제공하니, 프로젝트에서 손쉽게 적용해 보세요.
[참고] Unity에 대한 경험이 없었지만 챗GPT를 활용해서 3주만에 개발했어요. 약간의 수정은 있었지만 99% 코딩은 챗GTP가 했어요. 개발에 참고하세요.
* APP Store 에서 다운로드
https://apps.apple.com/kr/app/%EB%86%8D%EB%B6%80%EC%9D%98-%EA%BF%88/id6479183930
*Google Play 에서 다운로드
https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share
주요 기능 소개
- 텍스트와 폰트 설정 자동화
각 언어에 맞는 텍스트와 폰트를 손쉽게 설정할 수 있어요. 이 과정은 LocalizedString과 TextMeshProUGUI를 사용하여 자동으로 처리되며, 언어 변경 시 폰트도 자동으로 전환됩니다. - 다국어 지원을 위한 폰트 적용
한국어, 영어, 일본어 등 다양한 언어에 맞는 폰트를 미리 설정하고, 사용자의 로케일에 따라 자동으로 폰트가 전환됩니다. 이를 통해 다국어 UI에서 발생할 수 있는 글꼴 문제를 방지할 수 있습니다.
아래와 같이 ChatGPT에게 질문했어요.
※ ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.
[질문] 안녕, ChatGPT. 게임 내 UI에서 다국어 텍스트를 자동으로 로드하고 폰트를 적용하는 방법 좀 알려줄 수 있어?
[답변]
안녕하세요! 다국어 텍스트와 폰트를 Unity에서 어떻게 관리할 수 있는지 단계별로 설명해 드릴게요. 텍스트 로드와 폰트 적용 과정을 자동화한 SettingPrefabManager 스크립트를 소개합니다.
단계별 설정 과정
1. 로컬라이즈된 텍스트 설정
localizedHeadTitle = new LocalizedString { TableReference = "UI_Texts", TableEntryReference = "Headtitle" };
먼저, 각 UI 텍스트에 해당하는 LocalizedString을 설정합니다. 이 과정은 로컬라이제이션 테이블에서 지정된 텍스트를 비동기로 불러와 적용하는 방식입니다. UI에서 사용할 텍스트는 "Headtitle", "BackgroundSound" 등으로 미리 정의된 엔트리를 참조합니다.
2. 폰트 자동 적용
사용자의 로케일에 맞는 폰트를 자동으로 적용합니다. 예를 들어, 한국어로 설정된 경우 한국어 폰트가, 영어로 설정된 경우 영어 폰트가 적용됩니다.
switch (localeCode)
{
case "ko":
textElement.font = koreanFont;
break;
case "en":
textElement.font = englishFont;
break;
case "ja":
textElement.font = japaneseFont;
break;
}
이처럼 로케일 코드(예: ko, en, ja)에 따라 적절한 폰트가 적용됩니다.
3. 실시간 로케일 변경 처리
사용자가 게임 도중 언어를 변경해도 UI 텍스트와 폰트가 즉각적으로 업데이트됩니다.
이 기능은 SelectedLocaleChanged 이벤트를 통해 구현됩니다.
LocalizationSettings.SelectedLocaleChanged += OnLocaleChanged;
로케일이 변경될 때마다 텍스트와 폰트가 자동으로 업데이트되므로, 게임 내에서 유연한 다국어 지원이 가능해요.
전체 코드 예제
[SerializeField] private TextMeshProUGUI headTitleText;
[SerializeField] private TMP_FontAsset koreanFont;
[SerializeField] private TMP_FontAsset englishFont;
[SerializeField] private TMP_FontAsset japaneseFont;
private LocalizedString localizedHeadTitle;
private void Start()
{
// 로컬라이즈된 텍스트 미리 설정
localizedHeadTitle = new LocalizedString { TableReference = "UI_Texts", TableEntryReference = "Headtitle" };
// 폰트 설정 및 로케일 변경 구독
ApplyFontForCurrentLocale();
LocalizationSettings.SelectedLocaleChanged += OnLocaleChanged;
// 텍스트 적용
ApplyLocalizedText();
}
private void ApplyFontForCurrentLocale()
{
var localeCode = LocalizationSettings.SelectedLocale.Identifier.Code;
ApplyFontToText(localeCode, headTitleText);
}
private void ApplyFontToText(string localeCode, TextMeshProUGUI textElement)
{
switch (localeCode)
{
case "ko":
textElement.font = koreanFont;
break;
case "en":
textElement.font = englishFont;
break;
case "ja":
textElement.font = japaneseFont;
break;
}
}
private void ApplyLocalizedText()
{
localizedHeadTitle.GetLocalizedStringAsync().Completed += handle =>
{
if (headTitleText != null)
headTitleText.text = handle.Result;
};
}
Unity 에디터에서 실행 방법
Unity 에디터에서 Localization 패키지를 설정합니다. 각 언어에 맞는 폰트(TMP_FontAsset)를 준비하고, 이를 SettingPrefabManager에 연결합니다. 로케일을 변경할 때마다 텍스트와 폰트가 자동으로 전환되는 것을 확인하세요!
오늘은 SettingPrefabManager를 활용하여 다국어 UI 시스템을 구현하는 방법을 알아봤어요. 이 시스템을 통해 글로벌 플레이어들에게 보다 직관적이고 매끄러운 UI 경험을 제공할 수 있습니다.
지금까지 인텔리원스튜디오(IntelliOneStudio)였습니다!
감사합니다.
'디지털노마드' 카테고리의 다른 글
챗GPT게임개발66: App Bundle 크기 초과 문제 해결! Unity로 Base APK 최적화하기 (1) | 2024.11.23 |
---|---|
[공유] [인터뷰] 공군 현역으로 행정고시 합격한 22세 천상원 병장의 주경야독 스토리 (3) | 2024.11.18 |
챗GPT게임개발63: 다양한 이벤트 처리 방식과 그 동작 예제 (2) | 2024.07.14 |
챗GPT게임개발61: Unity에서 게임 상태 관리 시스템 구현 및 활용하기 (2) | 2024.07.10 |
챗GPT게임개발60:Unity에서 UI Builder를 사용하여 UI 디자인 및 이벤트 처리하기 (1) | 2024.07.08 |