MRが楽しい

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

Unity Localizationを使ってプロジェクトをローカライズする その10(変換規則に基づいて文字列をローカライズする)

本日は Unity の技術調査枠です。
Unity Localization を使ってプロジェクトをローカライズする方法を記事にします。
今回は変換規則に基づいて文字列をローカライズする方法です。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

変換規則に基づいて文字列をローカライズする

メニューから[Window -> Asset Management -> Localization Tables]を開きます。

今回も文字列を動的に変化させたいのでテーブルの[Smart]にチェックを入れます。

変換規則を指定したい場合は以下のフォーマットで文字列を指定します。

{変数名:choose(取りうる値):変換後の文字列}

フォーマットを利用して動的に文字列を変更するには Localize String Event コンポーネントを利用します。
作成した文字列を関連付けて、[Local Variables]にフォーマットで指定した変数の型を指定して追加します。

追加した[Local Variables]の項目に変数名と値を設定します。

この状態でシーンを再生してみます。
以下の通り、変数の値が変換規則に基づいて変換された文字列が表示されました。

スクリプトから値を変更する

この値をスクリプトから変更してシーン再生時に動的に変更してみます。
ボタン押下ごとに数値をカウントアップする以下のサンプルスクリプトを作成しました。
・LocalVariableCounter.cs

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization.Components;

public class LocalVariableCounter : MonoBehaviour
{
    private LocalizeStringEvent _localizeStringEvent;

    private int _count = 1;
    
    private readonly Dictionary<string, object> _localVariables = new Dictionary<string, object>
    {
        ["count"] = 1
    };
    
    void Start()
    {
        // String Reference の参照を取得する
        _localizeStringEvent = GetComponent<LocalizeStringEvent>();
        
        // LocalVariablesにディクショナリの参照を設定する
        _localizeStringEvent.StringReference.Arguments = new object[]
        {
            _localVariables
        };
    }
    
    public void CountUp()
    {
        // LocalVariablesの値をカウントアップする
        _count++;
        if (_count > 3) _count = 1;
        _localVariables["count"] = _count;
        
        // 表示文字列を更新する
        _localizeStringEvent.RefreshString();
    }
}

サンプルスクリプトを Localize String Event コンポーネントと同じオブジェクトに設定し、[Local Variables]をカラにしておきます。

ボタンのクリックイベントでカウントアップ関数を呼び出すようにします。

シーンを再生してボタンを押下していくと、以下の通りカウントアップされた数値が変換規則に基づいて表示されました。