はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】LocalizationのLocal Variablesをスクリプトから設定する

はじめに

今回はLocalizationLocal Variableをスクリプトから設定してみる記事になります。

Local Variables(ローカル変数)を活用している様子

LocalizeStringEventコンポーネントから設定する方法はよく紹介されているのですが、あくまでスクリプト上でLocal Variables(ローカル変数)を設定して活用する方法が分かりませんでした。

LocalizeStringEvent

そこでいくつかやり方を見つけたので紹介したいと思います。

Smartを有効にする

Local Variablesで変数を渡す際に、TableEntryを追加する際にSmartにチェックを入れておくのを忘れずに行なってください。

Smartを有効化しておく

やり方

以下のTableを例に実装していきます。

サンプル

LocalizedStringを活用する方法

// Localized StringのコンストラクタにてLocal Variablesを設定
var localizedString = new LocalizedString(tableReference: "SampleTable", entryReference: "Key1")
{
    {"player-name", new StringVariable { Value = "You" }},
};
        
// LocalizedString.AddでLocal Variablesを追加
localizedString.Add("enemy-name", new StringVariable{ Value = "Slime" });
        
Debug.Log(localizedString.GetLocalizedString());
// Localized StringのコンストラクタにてLocal Variablesを設定
var localizedString = new LocalizedString(tableReference: "SampleTable", entryReference: "Key1");

// LocalizedString.ArgumentsでLocal Variablesを追加
localizedString.Arguments = new object[]
{
    new Dictionary<string, object>
    {
        ["player-name"] = "You",
        ["enemy-name"] = "Slime",
    }
};
        
Debug.Log(localizedString.GetLocalizedString());

GetLocalizedStringを活用する方法

// Localized StringのコンストラクタにてLocal Variablesを設定
var localizedString = new LocalizedString(tableReference: "SampleTable", entryReference: "Key1");

Debug.Log(localizedString.GetLocalizedString(new object[]
{
    new Dictionary<string, object>
    {
        ["player-name"] = "You",
        ["enemy-name"] = "Slime",
    }
}));
var text = LocalizationSettings.Instance.GetStringDatabase().GetLocalizedString(tableReference: "SampleTable",
    tableEntryReference: "Key1",
    new object[]
    {
        new Dictionary<string, object>
        {
            ["player-name"] = "You",
            ["enemy-name"] = "Slime",
        }
    });
Debug.Log(text);

ひとこと

これ以外にも手法がありそうな気もするので、もし知っている方はコメント等で教えていただけると嬉しいです。