【Unity】【Localization】ローカライズしたアセットを動的に切り替える

UnityのLocalizationパッケージでローカライズしたアセットを動的に切り替える方法についてまとめました。

Unity 2020.3.15f2
Localization 1.2.1

やりたいこと

今、日本語と英語でローカライズされたSpriteがあるとします。
TableEntryとしては以下の二つのSpriteが登録されています。

ローカライズされたSprite

いま、ランタイムで動的にこのTableEntryを差し替えてローカライズされたSpriteを以下の二つに差し替えることを考えます。

差し替える

本記事ではこれを行う方法についてまとめます。

Localizationパッケージの基礎知識については以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

Component Localizerでローカライズする

まずローカライズを行うためにImageコンポーネントContext MenuからLocalizeメニューを選択します。
このComponent Localizerによるローカライズの手順は以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

動的にTableEntryを差し替える

それではTableEntryを差し替えてローカライズされたSpriteを動的に変更するコードを書いていきます。

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Components;

public class LocalizedSpriteChanger : MonoBehaviour
{
    [SerializeField] private LocalizeSpriteEvent _localizeSpriteEvent;
    [SerializeField] private LocalizedSprite[] _sprites;
    private int _currentSprite;

    private void OnGUI()
    {
        for (var i = 0; i < _sprites.Length; i++)
        {
            if (GUILayout.Button($"Change To: {i}"))
            {
                var sprite = _sprites[i];
                // Asset Referenceに値を代入すると自動的にアセットがロードされ、アセット変更イベントが呼ばれる
                _localizeSpriteEvent.AssetReference = sprite;
            }
        }
    }
}

上記のように、_localizeSpriteEvent.AssetReferenceLocalizedSpriteを代入することで、動的にTableEntryを切り替えることができます。

結果

このコンポーネントをアタッチして再生すると以下のように動的にTableEntryが切り替えられることを確認できます。

結果

関連

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com