[ 퍼온 글 ] [Unity3D 강좌] NGUI Example 10 - Localization
[Unity3D 강좌] NGUI Example 10 - Localization
written by icoder(http://icoder.tistory.com)
Localization 예제는 NGUI의 Localization, UILocalize 컴포넌트를 이용하여 다국어를 지원하는 손쉬운 방법을 보여줍니다. 현실적으로 실무에서 사용할 수 있을지 없을지는 좀 더 확인이 필요 하겠지만, 적어도 NGUI 개발 영역 내에서는 적은 비용으로 완벽한 다국어 지원 UI를 구성할 수 있습니다.
필요한 부분만 만들면서 설명 하겠습니다. 또한 원본 예제와는 달리, 버튼등의 간단한 UI는 Widget Tool을 사용해서 만들겠습니다. Widget Tool을 사용하는 기본적인 방법은 [NGUI 튜토리얼]을 참고하세요.
1. 새로운 씬을 만들고 기본 카메라를 제거합니다. 메뉴>NGUI>Open the UI Wizard 항목을 선택해서 UI Tool 화면을 띄우고 Create Your UI 버튼을 클릭해서 NGUI 기본 뼈대를 만듭니다. 특별히 변경 할 다른 속성은 없습니다. 기본 배경을 위해 Panel의 하위 오브젝트로 Tiled Sprite 위젯을 한장 추가합니다. Wooden Atlas의 Wooden Background sprite를 사용했습니다. 가로 세로 크기는 500으로 맞춰주세요.
2. 다국어 문자열 리소스 정보가 필요합니다. NGUI에서는 Localization 컴포넌트를 사용하여 UI에서 사용할 문자열 리소스 파일을 임포트합니다. 우선, 빈 오브젝트를 만들고 이름을 "Localization"으로 변경합니다. 이어서 메뉴>Component>NGUI>Internal>Localization 항목을 선택해서 Localization 컴포넌트를 추가합니다. 여기에 실제 문자열 리소스를 추가해야 하는데, NGUI가 미리 준비한 English, French 파일을 지정하겠습니다.
3. 문자열 리소스 파일은 윈도우즈의 INI 파일처럼 "키 = 값" 형태로 구성되어 있습니다. Localization 컴포넌트 스크립트는 이들 리소스 파일을 Text Asset으로 가지고 있는 싱글톤 객체입니다. 언어 선택 Popup List 위젯에 Language Select 컴포넌트가 연결되되고 특정 언어가 선택되면 Localization 객체의 currentLanguage를 변경합니다. 이 때 Localization 객체는 UIRoot의 모든 위젯에게 OnLocalize 핸들러 함수를 호출합니다. UILocalize 컴포넌트를 추가한 위젯은 이 핸들러 함수가 호출되고 Localization 객체에서 문자열 정보를 가져와 디스플레이 하는 방식입니다. 복잡해 보이지만, 간단하고 당연한 플로우입니다. 아래에 중요 코드를 첨부합니다. 참고하세요.
public class LanguageSelection : MonoBehaviour public class Localization : MonoBehaviour if (!string.IsNullOrEmpty(value)) if (asset != null && asset.name == value) // 바뀐 언어에 해당하는 텍스트 애셋 리소스를 로드합니다. if (txt != null) mDictionary.Clear(); void Load (TextAsset asset) public class UILocalize : MonoBehaviour if (string.IsNullOrEmpty(mLanguage) && string.IsNullOrEmpty(key) && lbl != null) string val = string.IsNullOrEmpty(key) ? "" : loc.Get(key); if (lbl != null) |
4. Localization 객체에게 언어를 바꾸라고 지시할 Popup List를 만들어 보겠습니다. Panel 오브젝트를 선택하고 Widget Tool을 이용하여 Popup List 위젯을 만듭니다. Wooden Atlas를 사용하고 Background에 Button, Highlight에 Button, Foreground에 Highlight - Shadowed를 사용합니다. 나머지 속성은 아래 그림처럼 지정합니다.
5. Popup List에 Language Selection 컴포넌트를 추가해 보겠습니다. 따로 설정할 속성은 없지만, 중요한 부분이기에 따로 섹션을 나누었습니다. 메뉴>Component>NGUI>Interaction>Language Selection 항목을 선택합니다.
6. 이 상태로 게임을 실행해도 팝업 리스트에 언어 목록이 디스플레이 됩니다. 언어를 변경했을 때 어떻게 텍스트나 스프라이트가 바뀌게 되는지 확인 해 보겠습니다. 먼저, Panel의 자식으로 Label 위젯을 하나 추가합니다. 이어서 UILocalize 컴포넌트를 추가합니다. 메뉴>Component>NGUI>UI>Localize 항목을 선택하면 됩니다. Key 값은 문자열 텍스트 파일 중 해당 위젯에 사용할 문자열 키를 입력합니다. 단계 3에서 설명했듯이 문자열 리소스 파일은 "키=값" 형태로 구성됩니다. 여기서는 "Info"를 지정 해 봅시다. 이렇게 Key를 지정한 경우 Label 위젯의 텍스트 입력란은 의미가 없으니 해당 위젯을 설명하는 내용으로 채워주세요.Key 필드가 공백이면 입력된 텍스트를 키로 문자열을 찾게됩니다.
7. 언어 선택에 따라 스프라이트를 교체 할 수도 있습니다. Flag-US를 사용하는 Simple Sprite 위젯을 하나 생성하고, 단계 6과 마찬가지로 UILocalize 컴포넌트를 추가 해 주세요. Key 필드 속성은 Flag로 지정합니다. 게임을 실행 하고 언어를 바꿔 보세요. 어떻게 나오나요?