アプリを作ったあとに、英語切り替えや多言語切り替えを行って、他の国向けにもリリースを行いたいことがあると思います。ここではUnityのパッケージであるLocalizationパッケージを使って簡単に切り替えて行きたいと思います。便利!
Localizationパッケージについて
気づいたらUnityの公式パッケージとして展開されていた、多言語切り替え機能のパッケージです。画像やテキストなどを切り替えることが出来、動作中に切り替えることも可能です
https://docs.unity3d.com/Packages/com.unity.localization@1.0/manual/index.html
インストール方法
インストール方法はバージョンによって少し変化します。現在は2021LTSバージョンが出ているため問題なければUnity2021で行うと良いでしょう。
バージョン | インストール方法 |
---|---|
Unity2021.2以降 | PackageManagerからLocalizationパッケージを見つけてインストール |
Unity2021.2より前 | PackageManagerのAdd package from git URLを利用 「com.unity.localization」を入力してインストール |
セットアップ
インストールが完了したら使うための準備を行います。今回は日本語と英語の切り替えができるようにしたいと思います。
Edit > Project Settings … からプロジェクトセッティングを開き、左側のタブからLocalizationを選択してください。選択出来たらLocalizeに必要なアセットを作成します。Createボタンを押下して、設定用のアセットを作成してください。(専用フォルダなどがあればいいですが、困ったらとりあえずAssets直下にそのままファイルを作りましょう。)
アセットを作成すると下図のような表示に切り替わります。赤い丸部分のLocale Generatorボタンを押してください。
立ち上がったLocale Generatorから利用する言語にチェックを入れてください。下図では日本語と英語を利用する場合になりますが、他の言語の場合は必要なものにチェックを入れてましょう。必要なものにチェックを入れたらGenerate Localesボタンを押してアセットを作ります。
確認用
先ほどと同じAssets直下にアセットを作った場合、以下のようなファイル構成になっているはずです。
今回は日本語をデフォルト設定とします。下図を参考に横線部分をJapaneseにします。右側のまるポチを選択すると、ウインドがポップアップしますので、そこからJapaneseのアセットを選択すると簡単に設定することが出来ます。(閉じる場合はダブルクリックで確定するか、選択後にウインドを閉じてください)
Locale Selectorについて
Locale Selectorを使うことで、どの言語を使うか指定することが出来ます。Localization Scene ControlsでActive Localeが設定されていない場合、言語選択を行うことができるようになります。
Locale Selectorについてはまた別の機会にまとめたいと思います。
Window>Asset Management>Localization TableからLocalization Tablesを開きます。
New Table Collectionタブに切り替えて、Type : Asset Table Collectionを選択してCreateボタンを押してください。保存する場所はいったんAssets直下にしましょう。
Nameをそのまま(New Table)場合、以下のようなファイルが作成されます。
- New Table
- New Table_en
- New Table_jp
Window>Asset Management>Localization TableからLocalization Tablesを開きます。
New Table Collectionタブに切り替えて、String Table Collectionを選択してCreateボタンを押してください。保存する場所はいったんAssets直下にしましょう。
こちらは名前を変えておきましょう。Name:New String TableでCreateすると、以下ファイルが作成されます。
- New StringTable
- New StringTable_en
- New StringTable_jp
Window>Asset Management>Localization Scene Controls を選択して下図のウインドを開いてください。Asset Tableに作成したAsset Table Collectionを設定します。
実際に使ってみる
設定が出来たら、実際に使ってみましょう。今回は画像や文字の切り替えを行って見ましょう。
画像の切り替え方について
UIなどで利用されるImageの画像を言語ごとに切り替えて見たいと思います。
言語切り替えで変更したい画像を用意してください。
UI>Imageで画面内に変更したい画像が表示された状態にしておくとGOOD
言語ごとに切り替え処理を行う前には、Localization Scene Controlsを起動します。Window>Asset Management>Localization Scene Controlsからウインドを立ち上げます。
Active Locale を変更したい言語に設定した状態で、Track Changesにチェックを入れます。
Track Changesのチェックを入れている間は、ローカライズの変更対象になってしまうので、狙った画像だけを速やかに変更しましょう。(一応後で修正も可能です)
Track Changesのチェックが入っている状態で、変更したい画像を変えます。
うまく変更できると、同インスペクターにGameObjectLocalizerというコンポーネントが追加されます。
※ローカライズ対象になったインスペクタは緑色に変化します(が、一度再生したりしないと変化が見られないことがあります。直ちに変化しなくても慌てないでOK)
ここまでの設定ができたら、動かしてみて確認してみましょう。Unityを再生すると、Gameビューの右上に言語設定で追加している言語がプルダウンで切り替えることができるようになっています。再生中に変更することで画像の変化が確認できると思います。
文字の変換もやっておこう
手順としては画像とほとんど同じですが、一応。
UIなどにテキストを利用した部分を用意します。渡しの場合はTextMeshProForUGUIで行いましたが、問題なく変更出来ます。(後撮りなので緑色になってますが、準備段階では通常と同じ色になっています)
画像と同じですが、Window>Asset Management>Localization Scene Controlsからウインドを立ち上げます。
変更したい言語に切り替えて、Track Changesにチェックを入れます。
Track Changesのチェックが入っている状態で、変更したい文字を変えます。
うまく変更できると、同インスペクターにGameObjectLocalizerというコンポーネントが追加されます。このあたりは画像と同様。
あとは再生して、言語切り替えをしながら更新されているか確認してみましょう。(下図は白色の文字がTextMeshProで書かれた文字です)
プログラムで切り替えてみる
作っても、動作中に切り替えが出来ないとね・・・。ということで最後は先程作った2つのLocaleを切り替えるプログラムを紹介して締めとします。
スクリプト
スクリプトは以下。準備できたら空のゲームオブジェクトに貼り付けてください。
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
public class LocaleChanger : MonoBehaviour
{
public void Change(string locale)
{
var _ = ChangeSelectedLocale(locale);
}
private async Task ChangeSelectedLocale(string locale)
{
LocalizationSettings.SelectedLocale = Locale.CreateLocale(locale);
await LocalizationSettings.InitializationOperation.Task;
}
}
ボタンでの呼び出し方
ゲーム内にボタンを用意したら、LocaleChangerのChangeメソッドを呼び出します。Changeメソッドの引数は登録した切り替え言語のkeyになります。今回の場合だと
言語 | キー(引数) |
---|---|
英語 | en |
日本語 | ja |
動作確認
日本語と英語の切り替えをボタンで行っている様子。画像とテキストの更新されるタイミングが若干ずれているが、実装するコストを考えると全然使えるツールではないでしょうか。
コメント