회사에서는 별도의 현지화 툴 없이, 전부 스프레드시트와 scriptable object로 해결했었다.
이 경우 (프로그래머 입장에서의) 장점은, 모든 string 값의 할당 로직을 코드에서 관리할 수 있다는 것이다.
그러나 이번에 사모사에서는 좀 더 간편한 툴로 현지화를 해결하고 싶었다.
조건
- 일단 스프레드시트는 사용하고 싶었다. 왜냐하면 =GOOGLETRANSLATE로 언어간 자동번역이 가능했기 때문. 이 기능 정말 편리하다.
- 무료 솔루션. 귀찮으면 유료 솔루션 구매해서 쓰는 습관이 생기고 있었는데, 이런 단순한 것까지 유료로 하기는 싫었다.
- 안정성.
찾아보니 유니티의 공식 Localization 패키지가 있었다. 공식 솔루션인데다가 무료고, 에디터 GUI도 잘 되어 있고, Google Spreadsheets API와 연동이 아주 쉽게 되어 있어서 이 방식을 채택하기로 했다. 새 시트 만들기, 해당 시트에 데이터 push, pull, 누락된 데이터 무시 등등 편리한 기능들이 있었다.
세팅 방법
아래 세 영상을 참고했다. 아주 쉬운 세팅 영상이다.
- 기본 설치 https://youtu.be/W4vLqWXK7rg?si=xP69XF9waZLEVW7I
- 언어별 폰트 설정 https://youtu.be/gDZGEcVpx-A?si=Irvi5z04ccoU5Li0
- 구글 스프레드시트 연동 https://youtu.be/XoynMhr_T8w?si=iZcAV_M3INrVkdBa
그 다음, 실제 Text나 TextMeshProUGUI 컴포넌트에서 우클릭 > Localize를 누르면 Localize String Event 컴포넌트가 붙는다. 여기에서 String Reference를 눌러서 해당 데이터의 키값을 검색, 선택해주면 된다. 처음 세팅이 익숙하지 않아서 좀 걸리지, 그 다음부터는 아주 빠르고 수월하다.
주의사항
- TMP 애셋에 Fallback Asset을 넣어주어야 한다.
- TMP 애셋에 Multi atlas 활성화 설정을 해야 폰트가 안 깨졌다.
추가로 알아보고 싶은 것은,
- 관련 요소가 최초로 Initialize 되는 로직과 시점 -> 게임 맨 앞 씬에 뜨는 로고가 애셋 테이블로 현지화되었으면 좋겠는데, 이때 딜레이가 있어서 스프라이트가 흰색으로 보이는 문제가 있어서 일단 기능을 꺼두었다. Localization 패키지가 어드레서블 시스템을 사용하기 때문에 어드레서블 로딩 때문에 그럴 것 같다는 예상을 하고 있으나, 아직 테스트는 안 했다.
- TMP Font Atlas 등 최적화 -> 한국어만 넣었을 때는 Atlas 크기도 넉넉하게 늘리고 별 걱정이 없었는데, 여러 언어가 추가되면서 TMP 애셋의 사이즈가 각각 16mb를 차지하게 되고... 앱 사이즈가 갑자기 훅 커졌다. 이거 최적화하는 방법을 봐야할 것 같다.