fkdl0048 / CodeReview

게임 개발자 관련 정보 모음집
5 stars 0 forks source link

Task: Unity Localization #10

Closed fkdl0048 closed 10 months ago

fkdl0048 commented 11 months ago

Task: Unity Localization

프로젝트 초기 설정으로 활용하면 좋을 내용이라 정리 후, 적용해보고 유요한 부분들 취합하여 블로그 글 작성 예정

현지화를 위한 작업

Localization 패키지(자동으로 바인디되어 어드레서블 패키지도 같이 들어옴)

설정

image

Locale Generator로 사용할 언어파일을 만들 수 있음(따로 세팅)

Project Locale Identifier: 프로젝트에서 기본으로 사용할 언어 설정

Windows -> Asset Manangement -> Localization Table을 통해 테이블 설정 가능

Table

image

Localization Table을 통해 테이블을 만들면 설정된 언어에 따라 +1개의 테이블이 만들어짐(관리, 언어당 한개)

구조는 딕셔너리와 같이 Key와 Value로 이루어져 있음

각 언어에 대해서 메타데이터를 설정할 수 있고, 따로 언어의 value마다 하나씩 설정할 수 있음

적용 (Event)

image

string Reference를 통해 사용할 Key, Table을 설정하고 값을 직접 확인할 수 있음

해당 컴포넌트에서 Update String을 통해 변경할 String값을 이벤트로 설정가능

Runtime Only에서 -> Editor and Runtime으로 변경하면 에디터에서도 확인 가능

RunTime중에 이제는 오른쪽 위에 있는 툴바를 통해 언어를 변경 가능

오브젝트에서 직접 추가도 가능함

Asset Table

string뿐만 아니라 지역에 따른 다른 Asset을 사용할 수 있음(sprite, audio 등)

해당 에셋의 점 세개의 설정으로 가서 rocalize를 누르면 맞는 이벤트를 생성해줌

Localization Scene Controls

image

Windows -> Asset Manangement -> Localization Scene Controls

Editor단계에서도 언어를 변경하여 체크할 수 있음

중요

자동으로 인스펙터의 변경사항을 저장하여 이벤트로 생성해줌 즉, 에디터 단계의 직접적인 수정을 이벤트로 바인딩하여 기록

편리함

Smart

내부 스트링에 들어가는 문자열의 경우 값을 받아와서 사용가능한 형태

"(Plaer_name)이 입장하셨습니다"와 같은 형태

만약 싱글플레이의 경우 플레이어를 전역으로 다루기 때문에 사용은 간단함

따로 variables Group을 만들어서 사용하면 된다.

image

Script

스크립트에서 접근하는 방법은 LocalizationSettings를 통해 접근

using System.Collections;
using UnityEngine;
using UnityEngine.Localization.Settings;

public class LocaleController : MonoBehaviour
{
    bool isChanging = false;

    public void ChangeLocale(int index)
    {
        if (isChanging)
            return;

        StartCoroutine(ChangeLocaleCoroutine(index));
    }

    IEnumerator ChangeLocaleCoroutine(int index)
    {
        isChanging = true;

        yield return LocalizationSettings.InitializationOperation;
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];

        isChanging = false;
    }
}

다음은 데이터를 가져오는 방법

LocalizationSettings.StringDatabase.GetLocalizedString("Table", "Key", "current locale");

위와 같이 사용은 못하지만 예시로 사용할 Table에서 Key값을 넣고 현재 지역을 넣어주면 해당 값을 가져올 수 있음

Extentions

가장 중요한 데이터 처리부분

두가지 형태를 지원 csv, google sheet

CSV

image

사용에 매우 간편하지만 보안에 취약하고, 수정이 불편함

이후에 좀 고민해보면 좋을 문제

table자체를 성격에 따라 분리하여 csv로 관리하면 매우 편할 듯 하다.

나중에 대화 시스템을 만들게 된다면 다른 패키지와의 결합이 가장 문제일 듯