Unity/Sky Studio

Sky Studio -개발 내용 - 다중언어 지원

NaTure77 2023. 1. 17. 03:39

초반에는 위와 같이 모든 텍스트를 영어로 작성하였지만,

앱 사용자들로부터  다국어 지원에 대한 피드백을 받게 되어 다국어 지원을 하기로 하였다.

 

하지만, 다중 언어 번역 기능은 Unity Engine에서 제공되지 않는 것 같았다. 따라서 앱 내에서 사용되는 모든 텍스트에 대해 각 나라 언어별로 번역 데이터를 만들어 보기로 하였다.

 

Sky 공식 디스코드를 통해 다양한 국가의 플레이어들에게 도움을 받아

각 나라별 번역 데이터를 Json 형식으로 제작하였고,  9개의 언어를 지원 할 수 있게 되었다.

.

Parsing 단계는 앱 실행 시 또는 앱에서 언어 변경 시 이루어진다.

 

Parsing 후 생성된 LanguageBox 객체는 앱 종료 전까지 소멸되지 않고

SceneLoad 할 때마다 Scene 내의 text들에 대응되는 string을 제공한다.

 

LanguageBox 멤버변수들 일부

Scene에 있는 모든 Text들에 접근 가능하도록 하여 Scene Load 시점에 text를 할당해 주도록 하였다.

하지만 이를 위해서 프로그램 코드의 구조를 되짚어 볼 필요가 있었다.

.

.

.

악보를 작곡하는 툴인 만큼 UI 요소가 매우 많아 그에 해당하는 클래스도 매우 많을 수 밖에 없었는데,

 

이 많은 UI 클래스들을 다른 코드들에서 직접 참조했다가는 코드의 의존성이 매우 복잡해질 거라는 생각이 들었다.

따라서 이 UI 클래스들을 관리하는 UIManager 클래스를 별도로 두었다.

public class UIManager : MonoBehaviour
{
    public static MainUI main;
    public static SliderUI slider;
    public static ScrollUI scroll;
    public static MovementUI movement;
    public static SheetEditorUI sheetEditor;
    public static HistoryUI history;
    public static PlayNPauseUI util;
    public static MessageUI message;
    public static SaveUI save;
    public static MenuUI menu;
    public static WarningUI warning;
    public static SetPitchUI pitch;
    public static PracticeUI practice;
    public static SettingUI setting;

    public static UIManager instance;
    .
    .
    <생략>
}

이를 통해서라면 특정 UI요소에 접근하기 위해서는 UIManager를 거쳐야 하기 때문에

UI에 접근하는 모든 참조위치를 한눈에 보기 쉬워졌고, 비교적 관리하기가 수월해졌다.

 

아래는 Menu class에서 MenuUI의 텍스트들을 할당하는 코드 일부이다.

.

.

.

사실 포스팅 하다가 좀 더 좋은 방법이 있지 않았을까 하는 생각에 멈칫 하기도 하였지만,

좋은 코드는 결국, 멋진 테크닉을 많이 쓰는 것이 아니라,

이해하기 쉬운 코드가 가장 베스트인 것 같다는 생각이 들었다.

약 2년 가까이 지난 코드였지만, 보고 쉽게 구조를 파악 할 수 있었기 때문에 나름 성공적이었다는 생각이 든다.