本日は Unity と HoloLens の技術調査枠です。
HoloLens2アプリでUnity Localizationを使ってローカライズする方法を記事にします。
前提条件
MRTK を用いて HoloLens2 向けアプリのプロジェクトを作成します。
MRTK を使った基本プロジェクトの環境構築手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
Unity Localization のセットアップ手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
MRTKのボタンコンポーネントにローカライズ設定を行う
MRTK のボタンコンポーネントにローカライズ設定を行ってみます。
以下の通り、MRTK のボタンプレハブを配置したサンプルシーンを作成しました。
[Localization Scene Controls]ウィンドウで[Track Changes]にチェックを入れてローカライズ設定を保存します。
この状態でボタンプレハブの Button Config Helper コンポーネントの[MainLabelText]を編集します。
以下の通り、Button Config Helper コンポーネントに対して編集を行ってもローカライズ設定が保存できました。
因みに Game Object Localizer コンポーネントは実際に文字列を設定している TextMeshPro コンポーネントを持つオブジェクトの方に追加されています。
シーンを再生して動作を確認します。
MRTK のボタンプレハブでもロケールに応じて文字列を変更することができました。
実機での動作
本アプリを HoloLens2 にデプロイして起動します。
このとき、HoloLens2 でアプリの言語設定を「日本語」にしていても英語のロケールで実行されてしまいます。
HoloLens2のロケール判定
これは UWP アプリでは CultureInfo.CurrentUICulture の判定が DefaultContext.Languages コレクションの最初の値で固定されているためです。
UWP アプリでもシステムの言語設定に合わせてロケールを切り替えるため、以下のスクリプトを追加して Application.systemLanguage の値を元にスクリプトから直接ロケールを変更するようにしました。
・LocaleChanger.cs
using UnityEngine; using UnityEngine.Localization; using UnityEngine.Localization.Settings; public class LocaleChanger : MonoBehaviour { async void Start() { // Application.systemLanguage の文字列が Japanese ならばロケールを ja に切り替える LocalizationSettings.SelectedLocale = Locale.CreateLocale( Application.systemLanguage.ToString().StartsWith("Japanese") ? "ja" : "en"); // 変更を待機する await LocalizationSettings.InitializationOperation.Task; } }
本スクリプトを適当なオブジェクトに設定してアプリを再デプロイします。
以下の通り、日本語のロケールに切り替わることが確認できました。