MRが楽しい

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

Unity Localizationを使ってプロジェクトをローカライズする その6(スクリプトからテーブルデータを参照する)

本日は Unity の技術調査枠です。
Unity Localization を使ってプロジェクトをローカライズする方法を記事にします。
今回はスクリプトからテーブルデータを参照する方法です。

前回記事

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

スクリプトからテーブルデータを参照する

スクリプトから直接テーブルデータを参照する場合、LocalizedStringTable を使ってランタイムアクセスが可能です。
docs.unity3d.com

string TableName = "SlateTextTable"; // 取得先のテーブル名
string Key = "slateMessage"; // 取得したいデータのキー名

StringTable stringTable = new LocalizedStringTable {TableReference = TableName}.GetTable();
string localeText = stringTable.GetEntry(Key).GetLocalizedString();

またスクリプトからデータを反映する場合、ロケール変更時の動作もスクリプトに実装したいケースがあります。
ロケールの変更イベントは LocalizationSettings.SelectedLocaleChanged で処理を登録することができます。
docs.unity3d.com

// ロケール変更時のイベントを登録する
LocalizationSettings.SelectedLocaleChanged += OnSelectedLocaleChanged;

private void OnSelectedLocaleChanged(Locale obj)
{
    StringTable stringTable = new LocalizedStringTable {TableReference = TableName}.GetTable();
    string localeText = stringTable.GetEntry(Key).GetLocalizedString();
        
    Debug.Log("Locale Changed");
}

サンプルコード

以下のサンプルコードを作成しました。
・LocaleMessageController.cs

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.Localization.Tables;

public class LocaleMessageController : MonoBehaviour
{
    [SerializeField] private TextMeshPro slateMessage;

    private const string TableName = "SlateTextTable"; // 作成したテーブル名を設定
    private const string Key = "slateMessage"; // 取得したい文字のキー
    
    private StringTable _stringTable;

    void Start()
    {
        _stringTable = new LocalizedStringTable {TableReference = TableName}.GetTable();
        slateMessage.text = _stringTable.GetEntry(Key).GetLocalizedString();
        
        LocalizationSettings.SelectedLocaleChanged += OnSelectedLocaleChanged;
    }

    private void OnSelectedLocaleChanged(Locale obj)
    {
        _stringTable = new LocalizedStringTable {TableReference = TableName}.GetTable();
        slateMessage.text = _stringTable.GetEntry(Key).GetLocalizedString();
        
        Debug.Log("Locale Changed");
    }
}

コンポーネントの参照を設定してダイアログの文言をスクリプトから変更するサンプルシーンを作成しました。

シーンを再生して動作を確認します。
ボタンを押下すると処理が呼び出され、ダイアログの文言がロケール変更に合わせて切り替わります。