강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của qbration219563
qbration219563

câu hỏi đã được viết

Lập trình hệ thống Unity Pt.2 - Gói All-in-One các hệ thống cốt lõi để triển khai game thương mại

Hệ thống hỗ trợ đa ngôn ngữ sử dụng Localize Asset Pt.1 (LanguageUI, SettingsUI, UserSettingsData, TitleManager, SceneLoader, GlobalDefine)

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

Đã giải quyết

Viết

·

375

0

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

C#unity객체지향

Câu trả lời 2

1

burningcarrot님의 프로필 이미지
burningcarrot
Người chia sẻ kiến thức

안녕하세요! 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. 로케일 변경 이벤트에 대응: 로컬라이제이션 시스템에서 제공하는 이벤트를 활용하여 언어 변경 시 폰트도 자동으로 변경되게 설정합니다.

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

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

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

Hình ảnh hồ sơ của qbration219563
qbration219563

câu hỏi đã được viết

Đặt câu hỏi