プロ必見!最新ローカライズ機能徹底解説 - Unityステーション
という動画をみて、Unity謹製の便利なローカライズツールのことを知りました。
ツールでできることは大変多岐にわたっていて、言語ごとにSpriteやAudioClipの切り替え等もできるようです。
動画中の拡張例はこちらの記事で紹介されています。
現在、ちょうど十数カ国のローカライズに対応したタイトルに関わっているので、早速これを使ってみようということになったのですが、一点だけ、スクリプトから呼ぶことができるのかについて不明だったので調べてみました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LocaleStringTest : MonoBehaviour
{
[SerializeField] TMPro.TMP_Text m_text = null;
[SerializeField] UnityEngine.Localization.Components.LocalizeStringEvent m_stringEvent = null;
#if UNITY_EDITOR
[SerializeField] UnityEditor.Localization.StringTableCollection m_collection = null;
#endif
private void Awake()
{
m_stringEvent.OnUpdateString.AddListener(onUpdate);
}
// Start is called before the first frame update
void Start()
{
#if UNITY_EDITOR
for (int i=0;i< m_collection.StringTables.Count; ++i)
{
Debug.Log("Table=" + m_collection.Tables[i].asset.name);
IEnumerator<UnityEngine.Localization.Tables.StringTableEntry> values = m_collection.StringTables[i].Values.GetEnumerator();
while (values.MoveNext())
{
string str0 = values.Current.Key;
Debug.Log("Key,Value=" + values.Current.Key + "," + values.Current.Value);
}
}
#endif
string str = m_stringEvent.StringReference.GetLocalizedString();
Debug.Log("LocalisedString=" + str);
}
// Update is called once per frame
void Update()
{
}
void onUpdate(string _str)
{
m_text.text = string.Format(_str, "World") +"!!";
}
}
m_stringEvent はTextMeshProにアタッチしたローカライズ用スクリプト、
m_collection はローカライズ用に作成したテーブルとなります。
ローカライズ用スクリプトやテーブルの作成方法については上記動画を参考にしてください。
テーブルからKey,Valueが取得でき、ローカライズ文字列への変更(OnUpdate())も動的に追加できるのを確認しました。ひとまず最低限これができれば安心して開発に組み込めそうです。
~~[追記] テーブルからKey,Valueが取得できるのはUnityEditorのみでした。~~ソースプログラムも更新しています
アップデートによりテーブルからKey,Valueが取得できるようになっていました。こちらで記事にしています。
ちなみにビルマ語(ミャンマー語)が表示されていないのは、Unityエディターのフォントがこれらの言語に対応していないためです。
Preferencesなどからもフォント変更はできないようなので、対応していない言語の国のUnityユーザーはどうしているんでしょうね?
経験上、こういう国の人たちは母国語以外に英語等の第二言語がペラペラだったりするので問題ないのかもしれません。