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
をトラッキングするためのスクリプトの例が掲載されています。