다이어로그 UI 가시성을 위해 각종 크기를 손봤습니다.
무슨 씹덕스러운 스토리냐는 감상이 드실 수도 있겠지만 쇼타박사랑 쭉쭉빵빵한 미인들이 그려져 있다는 뇌내보정을 거치면 읽을만합니다.
그리고 기존에 만들어뒀던 Localize용 Font 자동 세팅 클래스를 다시 만들었습니다.
당시 GPT한테 물어봐서 만들었던건데, 막상 생각해보니 훨씬 더 간단하고 쉽고 직관적인 방법이 있었음에도 불구하고 왜 그렇게 복잡한 방법을 택했는지 의문입니다.
public class LocalizeFontEvent : MonoBehaviour
{
private TextMeshProUGUI tmp;
private TextMeshProUGUI TMP
{
get
{
if(tmp == null)
tmp = GetComponent<TextMeshProUGUI>();
return tmp;
}
}
private void Start()
=> GlobalManager.instance.LocaleService.Register(this);
private void OnDestroy()
=> GlobalManager.instance.LocaleService.Unregister(this);
public void UpdateFont(TMP_FontAsset fontAsset)
{
TMP.font = fontAsset;
TMP.ForceMeshUpdate();
}
}
public class LocalizeFonts
{
[System.Serializable]
public class Set
{
[field: SerializeField] public Locale Locale { get; private set; }
[field: SerializeField] public TMP_FontAsset FontAsset { get; private set; }
}
[field: SerializeField] public List<Set> FontSets { get; private set; }
}//ScriptableObject로 Locale-FontAsset 쌍을 맞춰 저장해놓음
public class LocaleService : IDisposable //Manager 계층의 클래스
{
private readonly LocalizeFonts fonts;//Locale-FontAsset 데이터
private readonly List<LocalizeFontEvent> fontEvents = new();
//스스로 등록해놓은 LocalizeFontEvent 클래스들
private Locale currentLocale;
private TMP_FontAsset currentFont;
public LocaleService(LocalizeFonts fonts)
{
this.fonts = fonts;
LocalizationSettings.SelectedLocaleChanged += UpdateFont;
currentLocale = LocalizationSettings.SelectedLocale;
currentFont = GetLocaleFont(currentLocale);
}
public void Register(LocalizeFontEvent localizeFontEvent)
{
fontEvents.Add(localizeFontEvent);
localizeFontEvent.UpdateFont(currentFont);
}//LocalizeFontEvent들은 생성 즉시 자기 자신을 구독하는 동시에
//현재 Locale에 해당하는 Font를 배정받음
public void Unregister(LocalizeFontEvent localizeFontEvent)
=> fontEvents.Remove(localizeFontEvent);
private void UpdateFont(Locale locale)
{
if (currentLocale == locale)
return;
currentLocale = locale;
currentFont = GetLocaleFont(locale);
foreach (var fontEvent in fontEvents)
fontEvent.UpdateFont(currentFont);
}//Locale이 변경될 때(LocalizationSettings.SelectedLocaleChanged)마다 호출
//현재 Locale에 해당하는 Font를 가져와서 구독된 놈들에게 새로운 폰트 배정
private TMP_FontAsset GetLocaleFont(Locale locale)
=> fonts
.FontSets
.FirstOrDefault(set => set.Locale.Identifier == locale.Identifier)
.FontAsset;
public void Dispose()
{
LocalizationSettings.SelectedLocaleChanged -= UpdateFont;
}
}

LocalizationSettings.SelectedLocaleChanged의 존재를 알았다면 바로 만들어낼 수 있는 로직이었는데 굳이 각 컴포넌트마다 텍스트 변경에 구독 로케일 수정에 구독 에셋 변경에 구독 등등 왜이리 복잡하게 만들었을까 하는 생각을 했는데
막상 곰곰히 생각해보니 Editor Mode에서도 자동으로 폰트를 배정하려고 그렇게 했던 것 같네요.
'무제_LR' 카테고리의 다른 글
| 프로토타입용 이미지 에셋들 변경 (0) | 2026.01.31 |
|---|---|
| Addressable로 SpriteAtlas->Sprite 불러오기, Addressable Release (0) | 2026.01.28 |
| 최초 컷씬 카툰 에셋 추가 (0) | 2026.01.16 |
| 플레이어 (파티클)이펙트, 스테이지 점수 추가 (0) | 2026.01.16 |
| 텍스트 애니메이션 - Text animator for Unity 에셋 사용 (0) | 2026.01.13 |