本日は Unity の技術調査枠です。
Unity Localization を使ってプロジェクトをローカライズする方法を記事にします。
今回はローカライズした文字列を動的に変更する方法です。
前回記事
以下の前回記事の続きです。
bluebirdofoz.hatenablog.com
ローカライズした文字列を動的に変更する
メニューから[Window -> Asset Management -> Localization Tables]を開きます。
文字列を動的に変化させたい文言はテーブルの[Smart]にチェックを入れます。
以下のフォーマットで動的に変更したい文字列を指定します。
{変数名}
フォーマットを利用して動的に文字列を変更するには Localize String Event コンポーネントを利用します。
作成した文字列を関連付けて、[Local Variables]にフォーマットで指定した変数の型を指定して追加します。
追加した[Local Variables]の項目に変数名と値を設定します。
この状態でシーンを再生してみます。
以下の通り、変数の値が入力された文字列が表示されました。
スクリプトから値を変更する
この値をスクリプトから変更してシーン再生時に動的に変更してみます。
以下のサンプルスクリプトを作成しました。
・LocalVariableChanger.cs
using System.Collections.Generic; using UnityEngine; using UnityEngine.Localization.Components; public class LocalVariableChanger : MonoBehaviour { // Start is called before the first frame update void Start() { // String Reference の参照を取得する var localizeStringEvent = GetComponent<LocalizeStringEvent>(); // LocalVariablesを設定する localizeStringEvent.StringReference.Arguments = new object[] { new Dictionary<string, object> { ["message"] = "hello world" } }; } }
サンプルスクリプトを Localize String Event コンポーネントと同じオブジェクトに設定し、[Local Variables]をカラにしておきます。
シーンを再生すると、以下の通りスクリプトから設定した値で文字列が表示されました。