MRが楽しい

MRやVRについて学習したことを書き残す

Unity Localizationを使ってプロジェクトをローカライズする その9(ローカライズした文字列を動的に変更する)

本日は 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]をカラにしておきます。

シーンを再生すると、以下の通りスクリプトから設定した値で文字列が表示されました。