[Unity] スクリプトからローカライズテーブルを読み込む
最近はずっとUnityを触っているので、Unity関連の記事が多めです。
今回はちょっとした小ネタになります、そんなに難しい話ではないですがゲームを多言語化するに当たって便利な機能「Localization」を使って多言語対応テキストを作ってスクリプトでそれらを読み込む方法です。
※今回読み込むテーブルはStringTableCollectionになりますが、他の種類のテーブルでもほぼ同じ手順で読み込めると思います(未検証)
検証環境
- Unity 2022.3.29f1
- Localization Asset 1.4.5
Localization Tableを作成する
何がともあれLocalization Tableが無いと話が進まないので、先に作成しておきます。
ウィンドウ→パッケージマネージャーを開いて、左上のメニューにあるプルダウンから「パッケージ:Unityレジストリ」を選択します。
そうしたら今度はメニュー右の検索窓で「localization」と打ち込めばパッケージが出てくるので、インストールします。
インストールが完了したらウィンドウ→アセット管理→Localization Tablesを開き、テーブルを作成するためのウィンドウを表示しておきます。
細かい手順や実際のこの後のテーブル作成については、Unity公式のクイックスタートガイドを読んでみてください。
一通り準備ができたら、スクリプトからこれらのテーブルを取得してみます。
スクリプトから取得してみる
スクリプトから取得する方法は至って簡単です、LocalizationSettingsクラスを利用します。
※以降説明のためにあえて型推論は非使用で記載します
StringTable table = LocalizationSettings.StringDatabase.GetTable(tableName);
まず一つ目の方法、GetTableです。
StringTableCollectionを丸ごと取得したい場合はこの方法でStringTableクラスを受け取れます。
受け取ったStrngTableクラスはDictionaryみたいな構造になっており、KeyとValueで組になっているので、foreach等で取り出せます。
foreach (StringTableEntry entry in table.Values) {
// StringTableCollectionのキーを取得
string key = entry.Key;
// StringTableCollectionの値を取得
string value = entry.Value;
}
この時に取得したValueの値は現在の設定されているローカライズ言語の文字列になりますので、例えば英語と日本語の2つを登録している場合、今どちらの言語を使用しているかで取得できる値が変化します。
なので値を受け取る側では特に言語の選択は要らないので、共通化した処理で多言語対応化された文字列を受け取れるようになります、便利ですね。
続いて、Keyを指定して取得する方法です。
TableEntryResult entry = LocalizationSettings.StringDatabase.GetTableEntry(tableName, entryName);
こちらの場合はGetTableEntryを使用します、引数にはテーブル名とキー名を指定します。
取得できるTableEntryResultから値を取り出す方法は、先程の例とちょっとだけ異なります。
string key = entry.Entry.Key;
string value = entry.Entry.Value;
とは言ってもこれも難しくはないですね、ほとんど同じです。
LocalizationTableをスクリプトから取得できると表現できる幅が広がりますので、多言語対応するのであればほぼ必須のテクニックになります。
やり方も簡単ですし、覚えておいて損はないですね。