UnityのLocalizationパッケージでローカライズしたアセットを動的に切り替える方法についてまとめました。
Unity 2020.3.15f2
Localization 1.2.1
やりたいこと
今、日本語と英語でローカライズされたSpriteがあるとします。
TableEntry
としては以下の二つのSpriteが登録されています。
いま、ランタイムで動的にこのTableEntryを差し替えてローカライズされたSpriteを以下の二つに差し替えることを考えます。
本記事ではこれを行う方法についてまとめます。
Localizationパッケージの基礎知識については以下の記事にまとめていますので、必要に応じて参照してください。
Component Localizerでローカライズする
まずローカライズを行うためにImageコンポーネントのContext Menu
からLocalizeメニューを選択します。
このComponent Localizer
によるローカライズの手順は以下の記事にまとめていますので、必要に応じて参照してください。
動的に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.AssetReference
にLocalizedSprite
を代入することで、動的にTableEntry
を切り替えることができます。
結果
このコンポーネントをアタッチして再生すると以下のように動的にTableEntry
が切り替えられることを確認できます。