はじめに
Unity公式のローカライズアセットを使いたいが、まだプレビュー版なため情報も少ないし以前と仕様が変わっている。すぐ仕様が変わるので危険なのでプロジェクトに適用はまだ待ったほうが良さげ。
前はSmartTextの文字列の紐付けがプレハブアタッチで良かったのに今は違う模様(公式のリファレンスで確認)、スクリプトを介してやらないとだめになった、この仕様もまたすぐ変わりそうだが、やり方をメモしておく
インストール方法
Windows > Package Manager
左上の+からadd package from git URL... > com.unity.localization を入力
試した内容
以下の文字列を英語と日本語で切り替える
- タイトル/Title
- ハイスコア:X/Highscore:X
- using UnityEngine;
- public class PlayerData : MonoBehaviour
- {
- public int highscore = 123;
- }
ローカライズの初期設定
言語毎の文字列テーブル作成
Windows > Asset Management > Localization Tables
- Type : String Table Collectionを選択
- Name : TestLocalizationTableとした
Createをクリック > 適当なAssetsフォルダ以下を指定
Edit Table Collectionタブが開くのでAdd New Entryから以下の通り入力
タイトルテキストをローカライズ
ローカライズ用のコンポーネントを追加
- UI > Textを追加して、TitleText名前に変更
- TitleTextの大きさと位置を適当に調整
- TitleTextのTextコンポーネントの右上の...をクリック > Localize
- TitleTextに追加されたLocalize String Eventから以下の通り設定
- String Reference : TestLocalizationTable/Title
ハイスコアテキストをローカライズ
ローカライズ用のコンポーネントを追加
- UI > Textを追加して、TitleText名前に変更
- TitleTextの大きさと位置を適当に調整
- TitleTextのTextコンポーネントの右上の...をクリック > Localize
- TitleTextに追加されたLocalize String Eventから以下の通り設定
- String Reference : TestLocalizationTable/Title
変数をテキストに埋め込むためのスクリプトを作成してアタッチ
以下のスクリプトを作成し、HighscoreTextにアタッチ
- using UnityEngine;
- using UnityEngine.Localization;
- using UnityEngine.Localization.Components;
- public class HighscoreText : MonoBehaviour
- {
- [SerializeField] PlayerData playerData;
- public LocalizeStringEvent localizedStringEvent;
- LocalizedString originalLocalizedString;
- public LocalizedString localizedString = new LocalizedString();
- void Start()
- {
- originalLocalizedString = localizedStringEvent.StringReference;
- localizedStringEvent.StringReference.Arguments = new[] { playerData };
- }
- public void Show()
- {
- localizedStringEvent.RefreshString();
- }
- }
以下の通り設定
- PlayerDataにシーン上に配置してあるPlayerDataを登録
- Localized String EventにHighscoreTextのゲームオブジェクト(自身)を登録
- Localized StringにTestLocalizationTable/Titleを設定
最終的にできたもの
おわりに
単に文字列を差し替えるだけなら簡単!(タイトル/Titleとか)
変数のSmartStringで変数埋め込み(ハイスコア:x/Highscore:xとか)は今回作ったものもすぐに仕様が変わって動かなくなりそうな予感、設定方法も冗長なのでなんかいまいち
0 件のコメント:
コメントを投稿