Unity Localization Package v1.0.0-pre9の使い方メモ

2021年6月17日木曜日

Localization Unity

t f B! P L

はじめに

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とか)は今回作ったものもすぐに仕様が変わって動かなくなりそうな予感、設定方法も冗長なのでなんかいまいち

Translate

このブログを検索

  • ()
  • ()
もっと見る

QooQ