강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

personal account님의 프로필 이미지
personal account

작성한 질문수

유니티 시스템 프로그래밍 Pt.2 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

로컬라이즈 어셋을 활용한 다국어 지원 시스템 Pt.1 (LanguageUI, SettingsUI, UserSettingsData, TitleManager, SceneLoader, GlobalDefine)

로컬라이즈 어셋 각 언어별 폰트적용

해결된 질문

작성

·

240

0

안녕하세요. Part1부터 수강중인 학생입니다!
수업 잘 듣고 있습니다.
로컬라이즈 어셋을 활용한 다국어 지원 시스템에서 각 언어마다 font를 다르게 지정할 수 있는 방법이 있나요?
구글링과 gpt를 사용하여 검색을 해보았지만 처리하기 어려워 질문을 남깁니다!

답변 2

0

BurningCarrot님의 프로필 이미지
BurningCarrot
지식공유자

안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.

유니티가 제공하는 Localized Property Variants 기능을 통해 구현할 수 있는 것 같긴 합니다만, 약간 복잡하다고 생각하실 수 있을 것 같아 아래 자체적으로 구현한 방법을 알려드리니 적용해 보시기 바랍니다.

https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/LocalizedPropertyVariants.html

 

UIManager.cs에 폰트 어셋 변수 선언 후 Inspector에서 언어별 폰트 지정

public class UIManager : SingletonBehaviour<UIManager>
{
    //..(중략)..
    public TMP_FontAsset DefaultFont;
    public TMP_FontAsset EnglishFont;
    public TMP_FontAsset KoreanFont;
    //..(중략)..
}

TextMeshProUGUI 컴포넌트가 있는 오브젝트에 UILocalizationFontHandler 컴포넌트 추가

using TMPro;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;

[RequireComponent(typeof(TextMeshProUGUI))]
public class UILocalizationFontHandler : MonoBehaviour
{
    private TextMeshProUGUI m_TextComponent;

    void Awake()
    {
        m_TextComponent = GetComponent<TextMeshProUGUI>();
    }

    void OnEnable()
    {
        SetFontAsset();
    }

    void SetFontAsset()
    {
        Locale currentLocale = LocalizationSettings.SelectedLocale;
        TMP_FontAsset selectedFont = UIManager.Instance.DefaultFont;

        switch (currentLocale.Identifier.Code)
        {
            case "ko":
                selectedFont = UIManager.Instance.KoreanFont;
                break;
            case "en":
                selectedFont = UIManager.Instance.EnglishFont;
                break;
            default:
                break;
        }

        if(m_TextComponent.font != selectedFont)
        {
            m_TextComponent.font = selectedFont;
        }
    }
}

 

0

안녕하세요, 인프런 AI 인턴입니다. personal account님.

유니티에서 로컬라이제이션을 사용하여 다국어 지원 시스템에 각 언어마다 다른 폰트를 적용하는 방법은 다음과 같이 진행할 수 있습니다.

  1. 로컬라이제이션 테이블 설정: 각 언어에 대한 별도의 로컬라이제이션 테이블을 생성합니다. 이 테이블은 언어별 텍스트 뿐만 아니라 폰트 정보를 포함할 수 있습니다.

  2. 스크립트에서 폰트 변경: 로컬라이제이션이 변경될 때 해당 언어에 맞는 폰트를 적용하도록 스크립트를 작성합니다. 이를 위해 TextMeshPro 등과 같은 유니티의 UI 텍스트 컴포넌트를 활용하세요.

   using UnityEngine;
   using TMPro;

   public class LocalizeFont : MonoBehaviour
   {
       public TextMeshProUGUI textMeshPro;
       public Font fontForEnglish;
       public Font fontForKorean;
       
       public void OnLanguageChanged(string language)
       {
           if (language == "English")
           {
               textMeshPro.font = fontForEnglish;
           }
           else if (language == "Korean")
           {
               textMeshPro.font = fontForKorean;
           }
           // 다른 언어에 대해서도 동일하게 설정
       }
   }
  1. 로케일 변경 이벤트에 대응: 로컬라이제이션 시스템에서 제공하는 이벤트를 활용하여 언어 변경 시 폰트도 자동으로 변경되게 설정합니다.

관련된 추가 정보는 다음의 게시물을 참조하실 수 있습니다:

이 방법들은 다국어 게임 개발 시 폰트를 언어에 맞춰 효율적으로 관리할 수 있게 도와줍니다. 궁금한 점이나 추가 질문 있으시면 언제든지 말씀해 주세요!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

personal account님의 프로필 이미지
personal account

작성한 질문수

질문하기