본문 바로가기
디지털노마드

챗GPT게임개발65: Unity로 쉽고 빠르게 다국어 UI 시스템 구현하기

by 인텔리노마드라이프 2024. 10. 11.
728x90

안녕하세요. 인텔리원스튜디오(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

 

‎농부의 꿈

‎오래된 전설이 숨겨져 있는 [농부의 꿈]목장 한구석에서 ‘비밀의 문'과 '마법 책'이 발견되었어요. [변신하는 동물들] 병아리가 합쳐져 닭이 되고, 닭이 합쳐져 고슴도치로 변신하며, 점점 더

apps.apple.com

 

*Google Play 에서 다운로드

https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share

 

농부의 꿈 - Google Play 앱

평화로운 목장에서 신나는 동물 합치기 무료게임 (바람, 뚫어뻥, 밧줄, 무중력 등 매직 아이템 활용해 병아리를 젖소로 키워보세요.)

play.google.com

 

주요 기능 소개

  1. 텍스트와 폰트 설정 자동화
    각 언어에 맞는 텍스트와 폰트를 손쉽게 설정할 수 있어요. 이 과정은 LocalizedString과 TextMeshProUGUI를 사용하여 자동으로 처리되며, 언어 변경 시 폰트도 자동으로 전환됩니다.
  2. 다국어 지원을 위한 폰트 적용
    한국어, 영어, 일본어 등 다양한 언어에 맞는 폰트를 미리 설정하고, 사용자의 로케일에 따라 자동으로 폰트가 전환됩니다. 이를 통해 다국어 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)였습니다!

감사합니다.

 

 

728x90