はじめに
作ったゲームに表示言語を変える機能をどうやって実装するか考えてみました。
とりあえず、テキストUIに対して実装してみましたので公開します。
目次
1.仕組みについて
まず、仕組みを解説します。
テキストコンポーネントに表示を切り替えるスクリプトをアタッチします。
そのスクリプトに、言語別の文字列を登録したスクリプタブルオブジェクトを設定します。
表示言語を変更すると表示が切り替わる仕組みにします。(fig.1)
fig.1 表示を変える仕組み
2.スクリプト等の準備
キャンバスにテキストコンポーネント"Text(Legacy)"を一つ配置します。(fig.2)
fig.2 テキストコンポーネント
テキストコンポーネントにアタッチするスクリプト"CustumText.cs"を作成します。(script.1)
script.1 CustumText.cs
言語ごとの文字列を格納するスクリタブルオブジェクト"TextData.cs"を作成します。(script.2)
script.2 TextData.cs
言語の種類を定義するスクリプト"Language.cs"を作成します。(script.3)
script.3 Language.cs
テキストコンポーネントに"CustumText.cs"をアタッチします。
メニュー Assets -> Create -> TextData を選択し、スクリプタブルオブジェクトのファイル名を"SampleText.cs"にします。
"SampleText.cs"のインスペクターに、言語別の文字列を設定します。(fig.3)
fig.3 スクリプタブルオブジェクト
"CustumText.cs"のインスペクターに"SampleText.cs"を設定します。(fig.4)
fig.4 "CustumText.cs"のインスペクター
お疲れ様です!これで準備が整いました。
3.実行の様子
テキストコンポーネントのインスペクターから、先ほどアタッチした"CustumText.cs"の"Language"項目で表示したいものを選びます。
さっそくシーンを実行してみましょう。
fig.5 シーン実行の様子 ("Japanese"を選びました)
fig.6 シーン実行の様子 ("English"を選びました)
いかがでしたか?うまくできましたでしょうか。
4.おわりに
少々強引でしたがいかがでしたでしょうか?
今回のものをベースに言語設定を別スクリプトで管理すれば、複数のテキストコンポーネントを一括で切り替えることもできます。
しかし、数が多くなるとスクリプタブルオブジェクトの数も増えることになるので管理が大変になってしまいがちです。
こういうときは、データベース的なものを作ったほうが後々ラクになるかもしれませんが、私の技量が足りないのでやりませんでした。
今回も最後までお読みいただきありがとうございました。
5.参考文献
UnityでScriptableObjectを使ってアイテムデータベースを作成する (かめくめ氏)
https://gametukurikata.com/program/scriptableobjectitemdatabase
いつも参考になります。有難うございました!