LambFerret's Blog
건파밍 #4 게임 시스템 (4) : Localization 본문
이번 프로젝트를 시작하며, 나는 이전의 내 프로젝트에서 두가지를 가져왔다.
1. Save and Load (Data Persistence)
2. Localization
이 두가지는 온갖 유니티 프로젝트에 범용적이며 간단하고, 수제작이라 돈이 안들기에 가성비가 넘친다. ( 사실 금전의 여유만 있다면 사용할만한, 아니 사용해야하는 유료에셋들이 많다. 예를들어 Easy Save 3 이라던가.. Dialogue System이라던가.. )
이중에서 Localization (현지화, l10n, 로컬리제이션) 을 오늘 다뤄보고자 한다.
우선, 유니티 공식 채널의 유튜브인 이 영상 을 참고하였다.
일단 유니티 기본 패키지로 받을 수 있으므로 Window -> Package Manager -> localization 검색 후 다운받는다.
이후 적당한 Project 공간에 우클릭 -> Create -> Localization -> Localization Settings 를 생성한다.
Localization Settings 를 보게되면 처음에는 Locale이 아무것도 없을 것이다.
나는 이 게임을 한국어, 영어, 일본어로 번역하고 싶으므로 ko en jp 를 체크후 만들어준다.
이제 Localization Table 에다가 편하게 대사를 작성해 주면 된다!
이제 우선, UI 쪽에서 이 localization을 사용해보기로 하자. Name을 UI라고 지어준 후 Create하자. 만들어진 파일은 같은 폴더의 하위디렉토리로 넣으면 관리하기 쉽다.
만들고 난 결과물은 다음과 같다. 난 이미 사용중인 테이블이 있으므로 이제 내 테이블을 가져와보도록 하겠다.
설정된 Locale 의 Unique Key에 따른 그 값을 꺼내오는 방식이므로, Key는 겹치지 않도록 영문, 일어, 한글을 각각 설정해준다. 제일 자주쓰이는 Confirm과 Close를 보기로 하자.
이중 Text 컴포넌트의 적힌 "저장" 은 아무런 의미가 없다. 이는 어짜피 l10n 과정에서 내부적으로, 테이블에 있는 값을 사용하기에 들어가는 값은 테이블의 값이 중요하다.
Localize String Event 컴포넌트를 추가 후, String Reference에서 아까 테이블에 등록한 키인 Save를 가져온다.
혹은 테이블 창을 키기 귀찮다면, Add Table Entry를 눌러서 즉석에서도 가능하니까 어려울 것이 없다.
이후 밑의 Update String 이벤트를 등록해주면 되는데, 바꾸고자 하는 Text를 넣으면 되므로, 위의 Text인 TextMeshProUGUI.text를 넣어준다. 이를 통해 유추할 수 있는 것은, public string 필드가 있다면 이렇게 Update Event를 등록하여서 바꿀 수 있는 응용 방법이 있을 듯 하다.
이제 잘 작동하는지 Editor에서도 확인 가능하다. Window - Asset Management - Localization Scene Controls 를 클릭하면 Locale을 변경할 수 있는 창이 뜬다.
Active Locale을 바꾸면 영어로 뜬다.
이제 인게임에서도 바꿔봐야지 않겠어?
[Header("UI")]
public Dropdown languageDropdown;
private bool _isChanging;
private void Awake()
{
languageDropdown.onValueChanged.AddListener(ChangeLocale);
}
private void Start()
{
languageDropdown.options.Clear();
foreach (var locale in LocalizationSettings.AvailableLocales.Locales)
languageDropdown.options.Add(new Dropdown.OptionData(locale.LocaleName));
languageDropdown.RefreshShownValue();
}
private void ChangeLocale(int index)
{
if (_isChanging) return;
StartCoroutine(ChangeLocaleCoroutine(index));
}
private IEnumerator ChangeLocaleCoroutine(int index)
{
_isChanging = true;
yield return LocalizationSettings.InitializationOperation;
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
_isChanging = false;
}
옵션창의 MonoBehaviour 다.
Awake에서 "드롭다운이 바뀔때 마다 ChangeLocale을 시켜준다" 를 등록시킨다.
Start에서 dropdown의 옵션들(내용물) 을 가져와서 넣어준다. 이렇게 할 경우 내가 미리 등록했던 ko, en, jp 세개가 드롭다운 옵션으로 뜰 것이다.
ChangeLocale 메소드는 내부에 코루틴을 사용하는데, Locale이 바뀌는 과정은 비동기적으로 이루어지기에 이게 완전히 변경되기 전까지 또 다른 변경을 막기위해 이 과정을 사용한다. 이렇게 하면!
설정의 저장은 이전 편의 Data Persistence 부분을 참고하면 설정 저장이 가능하다.
오늘 개발중 있었던 난관이 멍청해진 GPT를 제치고 내 계획대로 해결되서 너무 기분좋았다. 개발중 기쁨의 댄스는 참을 수 없더라
매번 이랬으면 좋겠어요..
'게임 개발 > #2 건파밍 (2D 탑뷰슈터)' 카테고리의 다른 글
건파밍 #5 게임 시스템 (5) : Dialogue System (1) | 2025.02.10 |
---|---|
건파밍 #3 게임 시스템 (3) : Excel to ScriptableObject (1) | 2025.01.21 |
건파밍 #2 게임 시스템 (2) : Data Persistence (0) | 2025.01.18 |
건파밍 #1 게임 시스템 (1) : Singleton, GameManager (0) | 2025.01.18 |
건파밍 #0 개요 (0) | 2025.01.18 |