![유니티 로컬라이제이션 기능 사용해보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp2g7R%2Fbtr01TFt2VF%2F46AxMtPOBHkkye1k5ztW01%2Fimg.png)
최근 회사에서 출시한 게임의 영어/일본어 버전 작업을 진행했던터라,
3일전에 유니티채널에 올라온 이 영상을 보니 관심이 갔다.
회사에서나 개인적으로나 만든 어떠한 게임이라도 최소한 영어버전 정도는 만들어서 출시를 해야될거같다는 생각이라서 한번 직접 해봤다.
이 영상에 대한 내용을 정리한 글이니 위의 영상만 보셔도 상관 없을것같다.
준비 하기
일단 패키지매니저에서 Localization을 받아 주어야한다.
기본적으로 포함되어있는 패키지는 아니다.
간단한 UI들을 만들어주었다.
버튼을 누르면 해당 언어로 변환과 동시에 국기도 그에 맞게 세팅된다.
테이블 만들기
우리가 xml,csv파일로 테이블을 만들어 데이터들을 관리하듯이 데이터 테이블이 필요하다.
위의 경로로 들어가서 테이블 창을 켜보자.
하는김에 Localization Scene Controls도 같이 켜주자.
스트링 테이블 만들기
처음에는 비어있고 생성도 할 수 없다.
우리가 어떤 언어를 사용할지만 선택해주면되는데, Locale Generator 버튼을 눌러서 사용할 언어를 추가해주자.
그리고 타입은 String Table Collection, 이름은 각자 알아서 지어주고 Create를 눌러 테이블을 만들어야한다.
파파고를 이용해서 메인에 띄워둔 UI를 번역해왔다.
키값 - 내용
이렇게 만들어주면 스트링에 대한 세팅은 끝이다.
에셋 테이블 만들기
이번엔 메인에 있는 국기를 바꿔주기위해서 타입을 Asset Table Collection으로 선택하고 만들어주었다.
세팅은 스트링과 똑같다.
Key값과 어떤 에셋을 넣을지를 정해주면 된다.
난 국기를 넣어주었다.
인스펙터 세팅하기
메인 텍스트
인스펙터에서 Localize String Event를 추가해주어야 하는데, 두가지 방법이 있다.
첫번째는 위 사진처럼 검색해서 추가해주는 방법
두번째는 바꾸려는 컴포넌트 오른쪽 상단에 점3개를 눌러서 Localize를 눌러주는 방법이다.(이게 훨 편함)
메인에 있는 Text UI에 Localize String Event를 붙여주었다.
그리고 String Reference에 아까 설정해둔 테이블 MyTable에있는 Main 키값을 불러오도록 설정했다.
위에 추가해주는 방법중에 첫번째 방법을 쓰면 Update String에 따로 Text를 끌어다 넣어서 설정해주어야하고,
두번째 방법을 쓰면 자동으로 세팅까지 해준다.
아 그리고 아마 처음에는 테이블이 안뜰텐데,
Edit - Preferences- Localization에 가서 저 동그라미친 부분을 체크 해제해주면 뜬다.
국기 이미지
국기 이미지도 Image 컴포넌트 오른쪽 상단에 점 세개를 눌러서 Localize를 눌러주어 데이터 테이블만 세팅해주면 끝이다.
언어별 사이즈 대응하기
위의 작업을 전부 끝내고 나면 플레이 했을때 오른쪽 상단에 언어를 선택할수있는 드롭박스가 생성된다.
작업을 다 하고 나니 문제가 발생했다.
일본어혼자 너무 길어졌다.
우리가 아까 켜둔 창중에 Localization Scene Controls를 살펴보면, Track Changes라는게 있다.
이 기능을 키면 수정된 부분이 기록이 된다.
위 사진처럼 변한 부분이 초록색으로 표시되고, 아래에 Game Object Localizer라는 컴포넌트가 붙는다.
변한 컴포넌트들이 아래에 생성되는건데, 우리가 사용할 국가별로 해당 값을 바꿔줄수있다.
일본어만 너무 컸기 때문에, 44로 바꿔주었다.
이제 사이즈에 맞게 잘 나온다.
런타임에 언어 바꾸기
당연히 언어 설정은 게임이 시작하고 유저에 선택에 따라 달라져야한다.
그리서 위에 만들어둔 3개의 버튼을 통해 그 기능을 구현해보았다.
bool isChanging = false;
public void ChangeLocale(int index)
{
if (isChanging)
return;
StartCoroutine(LocaleChange(index));
}
IEnumerator LocaleChange(int index)
{
isChanging = true;
yield return LocalizationSettings.InitializationOperation;
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
isChanging = false;
}
일단 'UnityEngine.Localization.Settings' 를 Using 해주어야한다.
LocalizationSettings.InitializationOperation은 언어 세팅의 초기화가 끝나는지에 대한 작업을 반환해준다고 한다.
LocalizationSettings.SelectedLocale는 이름에서 알수있듯이 현재 우리가 고른 언어인데,
LocalizationSettings.AvailableLocales.Locales[인덱스] .. 즉 사용가능한 언어 배열에서 인덱스를 통해 가져오는것이다.
해당 코드를 만들어서
테이블에 있던 순서대로 버튼에 미국 - 0 , 일본 - 1 , 한국 - 2 를 넣어주었다.
런타임에도 작동이 아주 잘 되는것을 볼 수있다.
스크립트에서 테이블 접근하기
이번엔 다른 방식을 사용하기 위해 고양이를 누르면 나라에 맞게 울음소리를 내보려고 한다.
그에 맞게 cry 키값과 그에 맞는 데이터를 테이블에 넣어주었다.
public void Cry()
{
if (isCrying)
return;
StartCoroutine(CryCat());
}
IEnumerator CryCat()
{
isCrying = true;
Locale currentLanguage = LocalizationSettings.SelectedLocale;
cryText.text = LocalizationSettings.StringDatabase.GetLocalizedString("MyTable", "cry", currentLanguage);
cryText.gameObject.SetActive(isCrying);
yield return crySeconds;
isCrying = false;
cryText.gameObject.SetActive(isCrying);
}
총 3개를 Using 해주어야 한다.
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.Localization.Tables;
현재 사용하고 있는 언어를 받아서, 테이블, 키값을 입력해서 들고오는게 전부다.
고양이 이미지를 누르면 나오게끔 설정해두었다.
설정한 울음소리가 잘 나오는것을 볼 수있다.
CSV 로 Export
난 영상을 보는 내내 너무 좋은 기능이긴 한데 테이블 작업을 csv 파일이 아닌 유니티 엔진내에서 작업을하면 협업하기가 너무 어렵지 않을까 라는 생각을 했었다.
하지만 역시 Csv로 Export 기능이 있었다.
(구글 시트도 있긴 하지만 패스)
아까 만들었던 테이블을 찾아서 보면 아래 Extensions라는 부분이 보이는데,
구글시트, CSV중에 선택해서 만들면 위 사진처럼 나오게 된다.
Save를 해서 csv파일을 켜보면 아까만든 데이터들이 잘 나오는것을 볼 수있다.
다시 Import를 테스트 해보기위해 test라는 키값을 가진 테이블을 추가해주었다.
Open을 눌러서 csv파일을 열어주니 아래와 같이 테이블이 생성됐다.
아까 울음소리를 test 키값으로 바꿔서 잘 되나 테스트를 해봤다.
아주 잘 된다.
Smart라고 변수명을 가지고와서 그 뒤에 글들을 바꿔주는 기능도 있는데,
ex -> {global.name}님이 입장했습니다.
이 부분은 나중에 따로 테스트를 해봐야겠다.
번역 작업을 실제로 해보고 와서 이 기능을 써보니 나름 유용할것같다.
회사에서는 어떻게 진행할지 모르겠지만, 나 혼자 진행하는 개인 프로젝트라면 사용을 적극적으로 해야겠다.
'게임 엔진 > Unity' 카테고리의 다른 글
[유니티 에셋 추천] All In 1 Sprite Shader (6) | 2023.04.25 |
---|---|
Dotween tmp.pro DoText 함수 직접 구현하기 (0) | 2023.04.16 |
유니티 노치, 펀치홀 디자인 대응하기 (0) | 2023.02.26 |
유니티로 구글 애드몹(AdMob) 테스트 해보기 (0) | 2023.01.29 |
유니티 에셋공부 <Feel> - (1) (0) | 2023.01.18 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!