【Unity】Localizationパッケージ入門 - アセットをサクッとローカライズする

UnityのLocalizationパッケージを使ってアセットをローカライズする方法を簡単にまとめました。

Unity2020.3.15f2

要件とインストール方法

LocalizationパッケージはUnity2019.4以上が推奨されています。

インストールは、Unity2021.2以上であればPackage ManagerでLocalizationと検索すれば表示されます。
Unity2021.2よりも前のバージョンの場合、Package Managerで+ボタン > Add package from git URLを選択し、
com.unity.localizationと入力することでインストールすることができます。

Package Managerについては必要に応じて以下の記事を参照してください。

light11.hatenadiary.com

セットアップ

パッケージをインストールしたらまず初期設定を行なっていきます。
まず初めにEdit > Project Settings... > Localizationを選択して、Createボタンを押してLocalization Settingsファイルを作ります。

f:id:halya_11:20211101162141p:plain
Localization Settingsを作成

すると以下のような表示に変わるので、Locale Generatorを起動します。

f:id:halya_11:20211101162632p:plain
Locale Generatorを起動

Locale Generatorが起動したら使用する言語にチェックをつけてGenerate Localesを選択することでLocaleファイルを作成します。

f:id:halya_11:20211101163206p:plain
Localeを作成

最後にデフォルトの言語を設定します。
このためには以下のようにSpecific Locate SelectorとProject Local Identifierを任意の言語に設定します。

f:id:halya_11:20211101165812p:plain
デフォルトのLocaleを設定

テクスチャをローカライズする

それではまずテクスチャをローカライズ設定していきます。

Window > Asset Management > Localization Tables から Localization tablesウィンドウを開いて、
ローカライズ対象の言語を選択してCreateをクリックし、Asset Table Collectionアセットを作成します。

f:id:halya_11:20211101173652p:plain
New Table Collection

ローカライズのためのデータはこのアセットないに保存されることになります。
次にWindow > Asset Management > Localization Scene Controlsを選択し以下のウィンドウを開きます。
Asset Tableには先ほど作ったAsset Table Collectionを設定します。

f:id:halya_11:20211101175619p:plain
Localization Scene Controls

次に実際にその言語用のアセットを設定していきます。
Asset Localeに対象の言語を選択し、Track Changesにチェックを入れておきます。

f:id:halya_11:20211101175755p:plain
設定

この状態でシーンのアセットを編集します。
言語を切り替えながらアセットを設定していくと、その言語とアセットの対応情報が記録されます。

f:id:halya_11:20211101181043g:plain
アセットを設定

ここまで設定し、再生するとGameViewにLocale切り替えドロップダウンが表示されるので、これを設定するとローカライズ設定を確認できます。

f:id:halya_11:20211101181623g:plain
Game View

ローカライズ設定したGameObjectにはGame Object Localizerというコンポーネントが自動的にアタッチされます。
各言語に対する設定はここから追加、削除、編集することができます。

f:id:halya_11:20211101181750p:plain
Game Object Localizer

またLocalization Tablesウィンドウから確認することもできます。

f:id:halya_11:20211101181944p:plain
Localization Tablesウィンドウ

文字列の静的なローカライズ

文字列もテクスチャと同様にローカライズすることができます。
まずLocalization TablesウィンドウからString Table Collectionを作成します。

f:id:halya_11:20211101182323p:plain
String Table Collectionを作成

次にLocalization Scene Controlsウィンドウに上記のString Table Collectionを設定します。

f:id:halya_11:20211101182645p:plain
String Table Collectionを設定

あとはテクスチャの時と同様にTextコンポーネントに各言語の設定を行うだけです。
再生して言語を切り替えると以下のように見た目が切り替わることが確認できます。

f:id:halya_11:20211101182904g:plain
切り替え

文字列の動的なローカライズ

いまたとえば「動的に変化する数値によって出す文字列を変える、しかもその文字列をローカライズ対応する」という要件を考えます。
このようなケースではSmart Stringsが使えます。
Smart Stringsは要は「ある値をある規則に基づいて変換する」機能です。

たとえば以下は「example-countが1,2,3だったらそれぞれ一、二、三という文字列に変換する」Smart Stringsの例です。

{example-count:choose(1|2|3):一|二|三}

これをローカライズに使う場合、まずLocalization TablesウィンドウでSmart Stringsを使ったエントリを作成します。
この時、Smartチェックボックスにチェックを入れる点に注意してください。

f:id:halya_11:20211101192055p:plain
Smart Stringsを使ったローカライズ文字列を作成

これを使用するにはTextコンポーネントにLocalize String Eventコンポーネントをアタッチします。
さらにこのコンポーネントのString Referenceに先ほどのエントリを指定し、
Local VariablesにSmart Stringsで使ったexample-countという名前のint型の値を指定します(値は2にしておきます)。

f:id:halya_11:20211101192427p:plain
Localize String Event

これを再生すると以下のような結果が得られます。

f:id:halya_11:20211101192830g:plain
結果

さて上述の通り、Smart Stringsは「ある値」を「ある規則」に基づいて変換する機能です。

この「ある値」はSourceと呼ばれ、今回のようなコンポーネントに直接入力する以外にもいろいろな設定方法があります。
たとえばScriptable Objectを使って設定したり、スクリプトに書いた値を取得することもできます。
本記事では細かくは説明しませんが、マニュアルに全て書いてあるのでこの辺りはマニュアルを参照してください。

docs.unity3d.com

また、「ある規則」についてはFormaterと呼ばれ、これもまた多くの種類があります。
たとえば「値がマイナスだったら」のような条件により結果を変えたり、英語の場合、複数形だったらsをつける、などといった処理もできます。
こちらも本記事では細かくは説明しませんので詳細はマニュアルを参照してください。

docs.unity3d.com

LocalizationとAddressables

さて先ほどローカライズに使ったテクスチャのInspectorを見てみると、Addressableアセットシステムのアドレスが割り振られていることが確認できます。

f:id:halya_11:20211101194612p:plain
アドレスが付与されている

アプリをビルドする前にAddressableビルドが必要なので、この点認識しておきましょう。

その他の機能

本記事では説明しませんが、Localizationパッケージにはこの他にも以下のような機能が備わっています。

参考

docs.unity3d.com

docs.unity3d.com

docs.unity3d.com