도드넷
유니티 한글화 지역화 언어설정 시스템. [Feat. JSON Localization] 본문
유니티 한글화 지역화 언어설정 시스템.
JSON Localization 사용해서 한글-영문화하기
수익의 극대화, 잠재성 증폭을 위해서는 다양한 언어의 현지화, 번역은 필수이다.
나의 게임을 위해 스스로 구현한 유니티 현지화(Localization) 번역 시스템은 아래와 같다.
일단 JSON 객체로 저장하기 위한 Serializable 데이터 객체을 정의한다.
저장되는 객체는 LocalizationData 님으로 키값과 벨류값을 가진 LocalizationItem 리스트를 가진다.
그리고 번역-지역화-현지화를 책임지는 시스템 객체인
LocalizationManager는 LocalizedText라는 딕셔너리 데이터를 가진다.
잠깐.
딕셔너리?
이것은 두가지의 값 key, value 를 쌍으로 가지는 특수한 List 이다.
장점은 인덱스로 key를 넣으면 즉시 value가 반환된다. 따로 쿼리 함수가 필요없다는 이야기이다.
(단점은 for - i 인덱스에 의한 순차적 루핑이 안된다는 점)
1. 오리지널 번역 데이터의 생성과 저장
1) 일단 번역이 필요한 데이터가 포함된 컴포넌트를 모두 참조한다.
2) 저장할 데이터 객체를 정의한다.
3) 저장할 데이터 안에 들어갈 아이템 리스트 변수를 정의한다.
4) 내부 키인덱서 리스트를 정의한다. (정수 인덱스로 루핑을 못돌려서 사용함)
5) 딕셔너리 초기화
6. 딕셔너리 제작
- 딕셔너리에 번역이 필요한 값을 key 와 value로 저장한다.
- 동시에 내부 키인덱서 리스트에도 key를 저장한다.
7. 아이템 리스트로 변환-제작 (LocalizedText ▶ DATA.items)
- 딕셔너리는 for 루핑이 안되므로 내부 키인덱서 리스트(Internal_Key_Indexter)로
for를 돌려서 아이템 리스트를 제작한다.
8. JSON 데이터로 변환.
9. JSON 보기좋게 줄바꾸기
에디터에서 JSON 스트링의 번역 에딧팅이 쉽도록 줄구분 띄어쓰기를 구현을 위해 약간의 과정이 필요했다.
split 을 이용해서 key 와 value 값으로 이루어진 쌍으로 나누고
뒷부분에 "\n" 줄바꾸기 커맨드와 마무리 구문 ,{ 을 다시 추가해준다.
( 스플릿에 사용한 구문인 ,{는 증발하는듯 -.,- )
원문 데이터를 날리고 다시 제작한다.
(참고로 이렇게 줄바꾸기 구문을 추가해도 데이터 손실은 일어나지 않는다.)
10. 데이터 디스크에 쓰기
이제 JSON 파일을 복사해서 이름을 바꾼뒤 위처럼 손수 번역하면 된다.
혹은 이런파일을 용역(?) 번역가 혹은 팬들에게 넘겨주면 될듯하다.
2. 번역 언어 불러오기, 로드하기
1. 로드 함수 정의, 어떤 파일을 로드할지는 파라미터로 정한다.
영문 - EN.json
한글 - KOR.json
중문 - CN.json
일어 - JP.json
프랑스 - FR.json
독어 - GM.json
스페인어 - SP.json
포르투갈어 - PT.json
이탈리아어 - IT.json
러시아어 - RU.json
2. 똑같이 딕셔너리 초기화
3. 파일 경로 구성.
앞서 언급하진 않았는데 번역파일은 streamingAssetsPath에 놓는데 이건 Assets 폴더에 StreamingAssets 이라는 폴더를 직접 만들면 된다.
4. 객체로 불러오기
5. 불러온 객체의 아이템 리스트로 딕셔터리 재구성!
6. 구성이 끝나면 bool 값 true로 놓기(
7. 번역이 필요한 모든 대화 객체들에게 번역하기 함수 실행시키기.
번역이 필요한 모든 객체들은 게임 시작시 GetComponentsInChildren에 의해서 모두 레퍼런스 됨.
이것은 각각의 Conversation 객체 즉, 번역이 필요한 객체에 내장되어 있는 "번역하시오" 함수이다.
함수의 내용은 LocalizationManager에게 key로써 Query를 날려서 필요한 string 값을 가져와서 대채하는것.
key는 원본 (영어) 값이 되겠다.!
이것은 Query 함수인데 현재 구성된 번역 딕셔너리에서
인덱스에 key만 넣으면 알아서 찾아오므로 굉장히 심플하다.
value값을 못찾을경우 key를 다시 반환한다.
오리지널 영문판
한글판
* 유니티 한글 불러오기 외계어 JSON 오류 해결법 *
- 번역파일 - 다른이름으로 저장 - 저장버튼옆에 드롭다운 - 인코딩하여 저장 - 유니코드 UTF-8 (서명이있는...)으로 설정해서 저장 - 오류 해결!
:3 woooot
'창고 > 게임 개발 [Hidden]' 카테고리의 다른 글
[메모] 유니티 Development Build 로 Build And Run하는 방법 (0) | 2019.06.29 |
---|---|
유니티 모바일 StreamingAssets 경로 사용해서 객체 읽기 (0) | 2019.06.27 |
C# 함수를 변수로 델리게이트 사용 방법 (0) | 2019.06.21 |
유니티 모바일 최적화 체크리스트 60 프레임에 도전해보자! (1) | 2019.05.31 |
인디게임 개발#22 - AI 성향 유닛 Behavior 스크립팅 (0) | 2019.03.04 |