はじめに
Unity公式のローカライズアセットを使いたいが、まだプレビュー版なため情報も少ないし以前と仕様が変わっている。すぐ仕様が変わるので危険なのでプロジェクトに適用はまだ待ったほうが良さげ。
前はSmartTextの文字列の紐付けがプレハブアタッチで良かったのに今は違う模様(公式のリファレンスで確認)、スクリプトを介してやらないとだめになった、この仕様もまたすぐ変わりそうだが、やり方をメモしておく
インストール方法
Windows > Package Manager
左上の+からadd package from git URL... > com.unity.localization を入力
試した内容
以下の文字列を英語と日本語で切り替える
- タイトル/Title
- ハイスコア:X/Highscore:X
Xは以下のクラスの中のhighscore変数の値を表示したいとする
このPlayerDataは空のオブジェクトにアタッチしておくものとする
using UnityEngine;
public class PlayerData : MonoBehaviour
{
public int highscore = 123;
}
ローカライズの初期設定
Edit > Project Setting > Localization
> Create > 適当なAssetフォルダ以下を指定
そのまま続きで
> Locale Generator > EnglishとJapaneseにチェック > Generate Locales > 適当なAssetフォルダ以下を指定
そのまま続きで
> Locale Selectorsの中の一番下にあるSpecific Locale Selector > identifierにEnglishを設定
言語毎の文字列テーブル作成
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を設定
最終的にできたもの
PlayerDataのhighscoreが変更された時に表示も更新させるには
HighscoreTextスクリプトのShow関数を実行すればよい
おわりに
単に文字列を差し替えるだけなら簡単!(タイトル/Titleとか)
変数のSmartStringで変数埋め込み(ハイスコア:x/Highscore:xとか)は今回作ったものもすぐに仕様が変わって動かなくなりそうな予感、設定方法も冗長なのでなんかいまいち


0 件のコメント:
コメントを投稿