MRが楽しい

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

Unity Localizationを使ってプロジェクトをローカライズする その5(スクリプトからロケールを変更する)

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

前回記事

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

スクリプトからロケールを変更する

スクリプトから直接ロケールを変更する場合は LocalizationSettings.SelectedLocale のロケール設定を直接変更することで変更可能です。

// ロケールを日本語に変更する
LocalizationSettings.SelectedLocale = Locale.CreateLocale("ja");

docs.unity3d.com

切り替えによる初期化は非同期で実行されるため、切り替えの完了を待機したい場合は以下のように LocalizationSettings.InitializationOperation.Task を待機します。

await LocalizationSettings.InitializationOperation.Task;

サンプルコード

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

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

public class LocaleChanger : MonoBehaviour
{
    /// <summary>
    /// ロケールを日本語に変更する
    /// </summary>
    public async void ChangeLocaleToJapanese()
    {
        // ロケールを日本語に変更する
        LocalizationSettings.SelectedLocale = Locale.CreateLocale("ja");
        
        // 必要であれば以下のコードで切り替えの完了を待機する
        await LocalizationSettings.InitializationOperation.Task;
    }
    
    /// <summary>
    /// ロケールを英語に変更する
    /// </summary>
    public async void ChangeLocaleToEnglish()
    {
        // ロケールを英語に変更する
        LocalizationSettings.SelectedLocale = Locale.CreateLocale("en");
        
        // 必要であれば以下のコードで切り替えの完了を待機する
        await LocalizationSettings.InitializationOperation.Task;
    }
}

各ボタンから処理を呼び出してロケールの切り替えを行うサンプルシーンを作成しました。

シーンを再生して動作を確認します。
ボタンを押下すると処理が呼び出され、ロケールを切り替えることができました。