UnityのLocalizationパッケージでローカライズした値を適用する二通りのワークフローをまとめました。
- はじめに
- 値を適用する二通りの方法
- 準備: Localization Tableを作成する
- Component Localizerを使う方法
- Localized Property Variantsを使う方法
- Localized Property Variantsでトラッキングできる値とCustom Tracked Object
- 関連
- 参考
Unity2020.3.15f2
Localization 1.1.1
はじめに
本記事ではUnityのLocalizationパッケージでローカライズした値を適用する二通りの方法についてまとめます。
Localizationパッケージの基礎知識については以下にまとめていますので、必要に応じて参照してください。
値を適用する二通りの方法
Localizationパッケージには、言語ごとに設定した値をコンポーネントに適用する方法が二通りあります。
一つ目は、Component Localizerと呼ばれるコンポーネントを使用する方法です。
こちらは対象のGameObjectにComponent Localizerをアタッチしてローカライズ用のエントリのキーを選択するという直感的にわかりやすい方法です。
これに対し、Localized Property Variantsという機能を使う方法もあります。
こちらは対象の値を入力した際に自動的にローカライズ用のデータとして登録してくれるという、より自然で簡潔なワークフローを実現するものになっています。
なおこのうち、Localized Property VariantsはUnity2020.3以降でのみ使える機能となっています。
マニュアルのQuick start guideを見ても、Unity2020.3と前と後で記述が変わっていることがわかります。
本記事では、実際に文字列をローカライズするワークフローを例にとり、この二つの方法についてまとめます。
準備: Localization Tableを作成する
まずローカライズを行う際にはLocalization Tableを作成する必要があります。
Window > Asset Management > Localization TablesからLocalization Tablesウィンドウを開いて、
対象のLocaleを選択して、TypeにString Table Collectionを選択し、Createをクリックします。

これで各Localeに応じたString Tableアセットと、それらの参照をもつString Table Collectionアセットが作られたら準備完了です。
Component Localizerを使う方法
さてそれではComponent Localizerを使ってTextコンポーネントの文字列をローカライズする方法から見ていきます。
まずシーン上に適当にTextコンポーネントがアタッチされたGameObjectを作成します。
次にTextコンポーネントのコンテキストメニューからLocalizeを選択します。

するとLocalize String Eventというコンポーネントがアタッチされます。
これがローカライズされた値をTextコンポーネントに伝える役割をするComponent Localizerです。
アタッチされていることを確認したらTable Collectionに先ほど作ったString Tableを選択し、
その後Add Table Entryをクリックして新しいエントリを追加します。

すると以下のようにエントリの情報が入力できるようになるため、各値を入力します。

これでローカライズ設定は完了です。
なおString Tableにすでに作成済みのエントリに関してはString Referenceから選択して設定することができます。

Window > Asset Management > Localization Scene Controlsを開いてLocaleを切り替えるとうまく反映されることが確認できます。

Localized Property Variantsを使う方法
次にLocalized Property Variantsシステムを使う方法について説明します。
まず、Project SettingsからProject Locale Identifierに、プロジェクトで通常開発するときに使われているLocaleを設定します。

次に、シーン上に適当にTextコンポーネントがアタッチされたGameObjectを作成します。
さらに、Window > Asset Management > Localization Scene Controlsを開いて、Track Changesにチェックを入れます。
String Tableには適当なテーブルをアサインしておきます。

この状態で、Active Localeを切り替えながらTextコンポーネントを編集すると、その値がローカライズされた値としてString Tableに自動的に保存されます。
より正確には、Active LocaleがProject Locale Identifierと一致しているときには何も起こりません。
Project Locale Identifierと異なるActive Localeが設定された状態でテキストを編集したときに初めてローカライズ値が保存されます。
またこのとき、GameObjectにはGame Object Localizerというコンポーネントが、上述のString Tableがセットアップされた状態でアタッチされます。

Localeを切り替えるとうまく反映されることが確認できます。

また、もう一つの機能として、Localization Scene ControlsのString TableをNoneにした状態で上記の操作を行うと、ローカライズされた値がString TableではなくGameObjectやシーンにシリアライズされます。
Game Object Localizerを見るとString Tableへの参照を持っていないことが確認できます。

このように条件に応じて挙動が変わるので若干複雑さを感じますが、実際に使ってみると実用的なワークフローがよく考慮されていることがわかります。
Localized Property Variantsでトラッキングできる値とCustom Tracked Object
さて前節のLocalized Property Variantsは、基本的にはJsonUtilityでシリアライズが可能な値を対象にトラッキングすることができます。
例えば自作のMonoBehaviourのstring型のSerializeFieldなどもトラッキングできます。
これに対し、TransformやCamera、LightなどJsonUtilityによるシリアライズに対応していないコンポーネントについてはCustom Tracked Objectを定義する必要があります。
ただし、TransformとRectTransformについてはあらかじめこれが定義されているためトラッキングできます。
Custom Tracked Objectの作り方は以下のマニュアルを参照してください。
AudioSourceのAudio Clipをトラッキングするためのスクリプトの例が掲載されています。