テキストを多言語対応し実行している環境に合わせてテキストオブジェクトのテキストを切り換える
検証環境
- Windows
-
- Windows 11
- Unity エディター
-
- 2021.3.12f1
- Input System (Unity Technologies)
-
- 1.4.3
- Localization (Unity Technologies)
-
- 1.3.2
この Tips の前提設定
この Tips の説明の前提として以下の設定を事前に行っています。
ローカライズについて
ゲームを開発するうえで多くの場合においては開発している環境での言語、または英語での言語で作成することが多いと思います。 しかしより多くの人にゲームを遊んでもらうためにはその国の文化、言語に合わせてゲームを作る必要があります。 これを一般的に「ローカライズ」と呼ぶことが多いです。
本 Tips ではそのローカライズの一つである「多言語対応」を行ってみたいと思います。 Unity では多言語対応を行う方法はいろいろありますが、今回は Unity 公式の拡張パッケージである「Localization」を使用して多言語対応したいと思います。
Localization パッケージのインストール
ローカライズ対応するにはまず「Localization」パッケージをインストールする必要があります。
メニューから「ウィンドウ -> パッケージマネージャー」を選択します。
表示されたパッケージマネージャーの左上で「Unity レジストリ」を選択します。
左のメニューに「Localization」が表示されるので選択してインストールボタンをクリックしてください。 インストールには少し時間がかかります。インストールしたらダイアログは閉じてください。
Localization の作成
パッケージをインストールしたら各言語のテキストを作成していきます。 メニューから「編集 -> プロジェクト設定」を選択します。
左のメニューから「Localization」を選択し、「Create」ボタンをクリックします。
ファイルが作成されますので任意のフォルダを指定します。複数のファイルが生成されますので専用のフォルダに作成したほうが良いです。 ここでは「Scenes」のフォルダの中に「Localization」のフォルダを作成してその中に作成しています。
作成すると画面が以下のようになります。
指定したフォルダにもファイルが作成されます。この時点ではまだ1つです。
ロケールの作成
言語と対応するテキストの作成をしていきます。 プロジェクト設定の Localization を開き「Locale Generator」ボタンをクリックします。
対応するロケールを選択します。必要なものだけ選択してください。 多くチェックすればそれだけゲームを広域に展開できますが、それに比例して作業量は増えていきます。
今回は「Japanese (ja)」「English (en)」「Spanish (es)」を選択しています。
設定したら右下の「Generate Locales」ボタンをクリックして作成します。
ファイルを作成するフォルダを指定します。別な場所でもいいですがまとまってた方が管理しやすいので先ほど作成した「Localization」フォルダを指定します。
Avaliable Locales に選択したロケールの数だけ追加されます。
指定したフォルダにも選択したロケールの数だけファイルが作成されます。
次に Locale Selectors を設定します。これはゲームが起動されたときにどの情報によってロケールが決定されるかの設定となります。 特別な決定条件がなければこのままでOKです。 試しにロケールが決定されなかったときのデフォルトのロケールを Japanese にしたいので、 3つ目の Specific Localse Selector から右の丸ボタンをクリックします。
「Japanese (ja)」を選択します。
Project Locale Identifier も同様に「Japanese (ja)」にします。
テキストの登録
各ロケールに合わせたテキストを作成していきます。 方法はいくつかあるのですが、ここではゲームオブジェクトが何もないところからテキストを設定していく方法で作成します。
メニューから「ウィンドウ -> アセット管理 -> Localization Tables」を選択します。
「New Table Collection」をクリックします。
作成したロケール全てにチェックがついていることを確認します。
今回はテキストのローカライズなので「Type」は「String Table Collection」を選択します。
各ロケールごとのテキストはテーブル形式の一覧として保持されるのでテーブル名を指定します。ここでは TextTable
としています。
入力したら「Create」ボタンをクリックします。
保存先を選択します。 テーブルごとに複数のファイルが生成されるので専用のフォルダを作成したほうが好ましいです。 ここでは「Localization」フォルダの中に「TextTable」フォルダを作成してそこを指定しています。
作成するとテーブルが表示されます。まだ何も作成していないので0行です。
フォルダの方もロケールの数だけファイルが作成されます。こちらを直接触ることは基本的にないです。
では試しにひとつ作成してみます。テーブルに「Add New Entry」ボタンがあるのでクリックします。
すると1行追加され、各ロケールごとに入力欄が表示されます。
試しに「こんにちは」という言葉を各言語に翻訳し、「Hello」「こんにちは」「Hola」をそれぞれ入力します。
キーは Hello
とします。 ちなみに入力すれば自動的に保存されます。
複数管理できることが分かるようにもう一行追加します。
「ありがとう」の言葉をベースにキーは ThankYou
、各言葉を「Thank you」「ありがとう」「Gracias」と入力します。
入力したらダイアログは閉じてください。どこかにドッキングさせてもいいです。
テキストオブジェクトへのローカライズ設定
今回は UI のテキストオブジェクトに対して、ゲームに設定されているロケールに応じて表示テキストが切り替わるようにしてみます。
まずは任意にテキストオブジェクトを配置してください。今回使ってませんが TextMeshPro
でも対応可能です。
配置したオブジェクトを選択したら Text コンポーネントの三点リーダーメニューから「Localize」を選択します。
すると新たに「Localize String Event」コンポーネントが追加されます。
String Reference が未選択なので None の箇所をクリックします。
ダイアログが表示されるので、上の入力欄にセットするテキストのキーを入力します。
ここでは Hello
と入力して下の一覧から Hello
をダブルクリックします。
String Reference を展開すると各種値が設定されていることを確認できます。設定はこれだけです。
実行して確認
設定が終わったらゲームを実行してみてください。 ゲームを実行するとテキストが変化するはずです。 下図では日本語の環境で実行しているので日本語で表示されます。
エディタ上のゲーム画面の右上には言語切り替えが表示されているのでそこでゲームの言語を変更することができます。 ためしに Spanish を選択してみます。
するとテキストの内容が自動で切り替わることを確認できると思います。
このように Unity 公式の Localizetion パッケージでは UI への適用と切り替えの動作確認が簡単にできるようになっています。
ためしにもう一つのテキストも設定してみてテキストが変化することを確認してみてください。
他の言語の環境で実行してみる
プログラムをビルドして出力し、他の言語の環境で実行したときに対応する言語で表示されるか確認してみます。
以下の図は Windows 11 の日本語 OS に対して追加で英語をインストールし、デフォルトの言語を英語にした環境で実行した結果です。 きちんと環境に応じて言語が切り替わっていることを確認できると思います。