Localizationパッケージはローカライズだけではなくテキストを管理するのにとても便利なので、最初から入れておこうというお話です。
- Localizationパッケージとは
- テキスト管理あるある
- Localizationでテキストを管理する
- 本来はローカライズのためのパッケージ
- CSVやSpreadSheet入出力にも対応
- 注意点: Addressablesの使用が前提
- まとめ
- 参考
- 関連
Localizationパッケージとは
UnityにはLocalizationという名前の公式パッケージがあります。
このパッケージはいわゆる多言語対応をするためのパッケージですが、ローカライズしないアプリに関してもテキスト管理に使うと便利な仕組みになっています。
また導入しておけば、後からローカライズが必要になった時にもスマートに対応できます。
本記事ではこのLocalizationパッケージを使ってテキスト管理を行うための知識についてまとめます。
テキスト管理あるある
ゲーム開発においてテキストの管理は重要な課題です。
例えば今、ゲーム内にOKと書かれたボタンが複数あることを考えます。
ボタンには複数のデザインがあり、デザインごとに異なるPrefabとして保存されていますが、テキストは全て同じ「OK」です。
ここで、この「OK」というテキストを全て「決定」に変更することになったとします。
「OK」という文字列はPrefabに保存されてしまっているので、全てのPrefabのテキストを一つ一つ変更していく必要があります。
これは明らかに非効率です。
対応策としてまず思いつくのが、スクリプトによる文字列管理です。
Enumや定数で文字列を管理して、スクリプトを通して適用します。
using System; public enum Text { OkButton, CancelButton } public static class TextExtensions { public static string GetString(this Text self) { return self switch { Text.OkButton => "決定", Text.CancelButton => "キャンセル", _ => throw new ArgumentOutOfRangeException(nameof(self), self, null) }; } }
この方法は一見良さそうに見えますが、エンジニアを介さないとテキストが変更できないという問題を持っています。
テキストを変更したいのはほとんどのケースで非エンジニアです。
それにもかかわらずちょっとしたテキストの変更も毎度エンジニアに依頼しなければならないワークフローは非効率で、無駄な労力が掛かります。
理想的にはエンジニアを介さずテキストを変更できるワークフローが求められます。
Localizationでテキストを管理する
Localizationパッケージを使うと、それぞれのテキストにキー名を割り振り、そのキー名を使ってアクセスすることができます。
例えば前節の例のOKボタンのテキストにOkButtonというキーをつけてアクセスすることができます。
この設定は専用のGUIツールを使って行われるため、エンジニアの手は必要ありません。
またテキストを変えたい時にはこの値を変更すれば、このキー名を使っている全てのテキストが変更されます。
もちろんこのように値を変更する際にもエンジニアの手は必要ありません。
この設定を行うためにはLocalizationパッケージの基本的な使い方を知っておく必要があります。
以下の記事ではインストールからテキストの設定手順まで一通りの流れを説明していますので、必要に応じて参照してください。
なお次節に記載している通り、Localizationパッケージをローカライズに使うにはより深い知識が必要になりますが、テキスト管理に使う上ではひとまず上記の記事の内容だけ把握していれば十分です。
本来はローカライズのためのパッケージ
さてここまでLocalizationパッケージによる文字列管理についてまとめました。
このLocalizationパッケージは本来、名前の通りローカライズを行うためのパッケージです。
下図のように、各言語に対応するテキスト(など)を設定してキーでアクセスすることによりローカリゼーションを実現する仕組みです。
一つの言語だけしか使わないプロジェクトであっても文字列にキーを通してアクセスする仕組みは使えるので、本記事ではそれを利用してテキスト管理に使っています。
またプロジェクトの初期にはローカライズを想定せずに作り始めたものの、あとからローカライズが必要になるといったケースもあります。
このとき、前述のような定数による管理をしていると後から他の言語に対応することが難しくなります。これに対して最初からLocalizationパッケージで管理しておけばスマートに対応できます。
そういう意味でも最初からこれを導入しておくメリットは大きいといえます。
CSVやSpreadSheet入出力にも対応
テキスト管理を考えた時に気になるのが、その文字列をSpreadSheetなどの外部ツールで管理できるかという点です。
実際、テキストデータはUnity上で編集するよりもSpreadSheetで編集した方が効率的なケースは多々あります。
そのため、LocalizationパッケージにはSpreadSheetとの同期機能が実装されています。これについては以下の記事にまとめていますので、必要に応じて参照してください。
またCSV形式での入出力もサポートしているので、SpreadSheet以外のツールでの管理もやりやすくなっています。
注意点: Addressablesの使用が前提
Localizationパッケージを使用する際の注意点として、LocalizationパッケージはAddressableを使うことを前提としているということがあります。
よってビルドしたアプリケーションで使用する際にはプレイヤービルド前にAddressableアセットシステムのビルドを行う必要があります。
ビルド方法の詳細は以下の記事の「Addressableのビルドを自動化する」節に書いてあります。
この記事にも書いてありますが、Unity2021.2以上、Addressables 1.19.4であれば、Addressable Asset Settings
のBuild Addressables content on Player Build
にチェックを入れればプレイヤービルド時に自動でAddressablesもビルドされるようになります。
なおテキスト管理だけでなくローカライズに使う際にはもう少し踏み込んだAddressableアセットシステムの知識が必要になりますが、その時に学べば問題ないワークフローになっています。
まとめ
以上、Localizationパッケージで文字列を管理する方法についてまとめました。
本ブログでは他にもLocalizationパッケージに関する記事を掲載していますので、より詳細な情報を得たい方はぜひ参照してください。