原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】Localization Tableで多言語化したテキストをスクリプト内で参照する

弱冷房車

乗り込もうとした電車の車両に「弱冷房車」のステッカーが貼られているのを見ると絶望する地球温暖化懐疑派の皆さんこんにちは。通勤ラッシュの時間帯に弱冷房とか誰が希望したんでしょう?え人が密集して暑苦しいのに冷房が何の役にも立たないばかりか、駅に停車するたびに開いたドアから熱風が吹き込んでくるので車内にいながら熱中症になりそうなんですが。弱冷房車提案した奴に小一時間説教してやりたい

 

教育素材的ゲーム

実は本格的に遊ぶのは初めてなんですリズムゲームを作成している上では勉強の為にも購入すべきと判断して11年ぶり?の新作で盛り上がっているゲームを購入しました。

昔はゲームセンターに筐体が設置されていてそこで遊んだ記憶では判定がかなりシビアだったと思うのですが、今作は入力の判定もステージクリアの基準も少し緩めになっている気がします。(特にオモテ側ステージ)
ゲーム開始前に遅延調整が有ったり、各ステージのチュートリアルがしっかりしていたりとクリアが容易になった理由は幾つかあるのでしょうが、基本的に判定基準が少し緩めに設定されているのが大きな理由になっていると思います。おそらく多くの人がオモテ側の殆どのステージを初見でクリアできているのではないでしょうか?

もちろん判定緩くなったからと言って面白さが損なわれているわけではなく、リズムに乗ってボタンを押す(コントローラーを操作する)事の楽しさが十分に表現されており、一つのステージは短いながらもバリエーションが豊富なので時間を忘れてゲームに没頭できるようになっているのはさすがといった感じ。
従来のリズムゲームだけでなくビートスペルといった新しいミニゲームも楽しくて、11年待った人も新しく始める人も誰もが楽しめるゲームだと思います。

ただ一つ難を上げるとすると、「リズムに従順であること」という主題が強すぎるため、一人でゲームを続けていると次第に「娯楽としてゲームを楽しむ」というより「音楽教育としてリズムを学んでいる」感が強くなり、プレイする度に緊張感と疲労がどっと押し寄せてく感じになります。
ここら辺は人によって感想が違うかもしれませんが、一人で腰を据えてじっくり楽しむ、というよりは大人数でワイワイ言いながら気軽に遊ぶ、といったスタンスが最も似合うゲームなのかもしれません。

 

テキストをスクリプトで制御する

Unity Localizationを使うと基本ノーコードで多言語対応可能ですが、スクリプト内で文章を編集してテキスト表示するような場合には、どうしてもスクリプト側で多言語化したテキストを参照する必要があります。

例えば、下のような画面で「テスト開始」のボタンを押すとボタンのテキストが「テスト停止」に変わり、「テスト停止」の表示中のボタンを押すと「テスト開始」と文言を変えるような制御をしたい場合、


日本語では「テスト開始」⇔「テスト停止」と表示し、英語では「Begin test play」⇔「Stop test play」と表示させたい。

勿論これをスクリプト内で直に文言を設定しても良いのですが、その場合は「ボタンの状態×選択された言語」の判定が必要となるので少し面倒です。なので今回はUnity Localizationを利用して「ボタンの状態」だけを判定して、選択言語に応じた文言をLocalization Tableから取得したいと思います。

 

Localization Tableの参照

最初にLocalization Tableには以下のように設定しておきます。

スクリプトでLocalization Tableの内容を参照するにはLocalizedStringを使います。

  LocalizedString localizedString  = new LocalizedString("テーブル名","キー名")

「テーブル名」に先ほどの図のLocalization Tableのテーブル名を指定し、「キー名」には「テスト開始」を表示したい場合は「play-start」を、「テスト停止」を表示したい場合は「play-end」を指定します。
すると現在の言語でローカライズをさせたLocalizedStringが取得されるので、その文字列を非同期取得で取得します。

   string message  = await localizedString.GetLocalizedStringAsync().ToUniTask(cancellationToken: cancellationToken);

   // メッセージテキストを更新
   textMeshPro.text = message;

 

実行結果

実行結果は以下のようになります

日本語

 

英語

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。