【Unity】Unity Localization入門:ゲームを世界中に届けるための多言語対応

作成: 2026-02-05

Unity公式のLocalizationパッケージを使った多言語対応の方法を解説。テキスト、画像、音声のローカライズからSmart Stringsによる動的テキストまで詳しく紹介します。

概要

「このゲーム、海外でもリリースしたいな…」そう思ったとき、最初に立ちはだかるのが 多言語対応 です。

本記事はUnity Localization 1.0以降(Unity 2022.3 LTS推奨)を対象としています。

Unity Localizationパッケージ は、Unity公式の多言語対応パッケージです。テキスト、画像、音声、フォントなどを言語ごとに管理し、実行時に切り替えることができます。CSVやGoogle Spreadsheetsとの連携も可能で、翻訳者との協業もスムーズです。

主な概念

概念説明
Locale言語と地域の組み合わせ(例:en-US、ja-JP)
String Tableテキストを言語ごとに管理するコンテナ
Asset Table画像、音声などを言語ごとに管理するコンテナ
Locale SelectorどのLocaleを使用するかを決定する仕組み
Smart Strings動的に変化する文字列をローカライズする機能

インストール

Package Managerからインストールします。

  1. Window > Package Managerを選択
  2. 左上のドロップダウンからUnity Registryを選択
  3. リストからLocalizationを見つけて選択
  4. 右下のInstallボタンをクリック

セットアップ

Localization Settingsの作成

  1. Edit > Project Settings > Localizationを選択
  2. Createボタンをクリック
  3. 保存先を選択

Localeの作成

  1. Localization Settings画面でLocale Generatorボタンをクリック
  2. 使用する言語にチェックを入れる(例:English、日本語)
  3. Generate Localesボタンをクリック

Locale Selector:起動時の言語選択

Locale Selectorは、アプリ起動時にどの言語を使用するかを決定する仕組みです。

System Language Selectorの設定

端末の言語設定に基づいて自動的に言語を選択します。

  1. Edit > Project Settings > Localizationを開く
  2. Localization Settingsを選択
  3. Locale Selectorsセクションで+をクリック
  4. System Language Selectorを追加
  5. 優先順位を調整(上から順に評価される)

Startup Selectorsの優先順位

Selector説明
Command Line Selectorコマンドライン引数で言語指定(デバッグ用)
System Language Selector端末の言語設定を使用
Specific Locale Selector特定の言語を固定
PlayerPrefs Selectorユーザーが選択した言語を保存・復元

推奨設定: PlayerPrefs Selectorを最優先にし、次にSystem Language Selector、最後にSpecific Locale Selector(フォールバック用)の順に設定すると、ユーザー選択 → システム言語 → デフォルト言語 の順で決定されます。

PlayerPrefs Selectorでの言語保存

ユーザーが選択した言語を保存・復元するコード例です。

using UnityEngine;
using UnityEngine.Localization.Settings;

public class LanguageSettings : MonoBehaviour
{
    private const string LANGUAGE_KEY = "selected_language";

    // 言語を変更して保存
    public void SetLanguage(string localeCode)
    {
        var locale = LocalizationSettings.AvailableLocales.GetLocale(localeCode);
        if (locale != null)
        {
            LocalizationSettings.SelectedLocale = locale;
            PlayerPrefs.SetString(LANGUAGE_KEY, localeCode);
            PlayerPrefs.Save();
        }
    }
}

補足: PlayerPrefs Selectorを使用すると、上記のように保存した言語コードを起動時に自動的に読み込んで適用します。

テキストのローカライズ

String Tableの作成

  1. Window > Asset Management > Localization Tablesを開く
  2. New Table Collectionタブを選択
  3. TypeString Table Collectionに設定
  4. Nameにテーブル名を入力(例:UI Texts
  5. Createボタンをクリック

UIテキストのローカライズ

  1. TextMeshProコンポーネントを持つGameObjectを選択
  2. Add ComponentLocalize String Eventを追加
  3. String Referenceでテーブルとエントリを選択

スクリプトからのローカライズ

using UnityEngine;
using UnityEngine.Localization.Settings;

public class LocalizedTextExample : MonoBehaviour
{
    async void Start()
    {
        try
        {
            var localizedString = await LocalizationSettings.StringDatabase
                .GetLocalizedStringAsync("UI Texts", "menu_start");
            Debug.Log(localizedString);
        }
        catch (System.Exception e)
        {
            Debug.LogError($"Localization failed: {e.Message}");
        }
    }
}

async voidの注意: async voidは例外が呼び出し元に伝播しないため、必ずtry-catchでエラーハンドリングしてください。本格的なプロジェクトではUniTaskCoroutineベースの実装を検討してください。

アセットのローカライズ

Asset Tableの作成

  1. Window > Asset Management > Localization Tablesを開く
  2. TypeAsset Table Collectionに設定
  3. Nameにテーブル名を入力(例:Game Assets
  4. Createボタンをクリック

Localization Scene Controlsの使用

  1. Window > Asset Management > Localization Scene Controlsを開く
  2. Asset Tableに作成したAsset Table Collectionを設定
  3. Track Changesをオンにする
  4. シーン内のアセットを各言語ごとに設定

フォントの切り替え

日本語⇔英語など、言語によってフォントを変える必要がある場合はAsset Tableを使用します。

フォントをAsset Tableで管理

  1. Asset Table Collectionを作成(例:Fonts
  2. 各言語にフォントアセットを登録
  3. TextMeshProのLocalize Font Eventコンポーネントを使用
using UnityEngine;
using UnityEngine.Localization.Components;
using TMPro;

public class LocalizedFontExample : MonoBehaviour
{
    [SerializeField] private TMP_Text textComponent;
    [SerializeField] private LocalizeAssetEvent fontEvent;

    void Start()
    {
        fontEvent.OnUpdateAsset.AddListener(asset =>
        {
            if (asset is TMP_FontAsset font)
            {
                textComponent.font = font;
            }
        });
    }
}

TextMeshPro Fallback Font

CJK(中国語・日本語・韓国語)対応では、Fallback Fontの設定が重要です。

  1. メインフォントアセットを選択
  2. InspectorでFallback Font Assetsを開く
  3. 日本語フォントアセットを追加

Font Asset Creator: TextMeshProで日本語フォントを使う場合、Window > TextMeshPro > Font Asset Creatorで日本語文字を含むFont Assetを作成する必要があります。「Japanese Hiragana + Katakana + CJK」などのプリセットを使用してください。

Smart Strings

動的に変化するテキストをローカライズする機能です。Smart StringsはSmartFormatライブラリに基づいています。

変数の埋め込み

こんにちは、{player_name}さん!

複数形の処理

日本語は複数形の区別がないため、シンプルに変数を埋め込みます。

日本語:

{count}個のアイテム

英語:

{count} {count:plural:item|items}

Smart Stringsの構文はSmartFormatライブラリに準拠しています。言語によって複数形のルールが異なるため、各言語に合わせた設定が必要です。

スクリプトから変数を設定

using UnityEngine;
using UnityEngine.Localization.Components;

public class SmartStringExample : MonoBehaviour
{
    [SerializeField] private LocalizeStringEvent localizeStringEvent;

    void Start()
    {
        // Argumentsを使用した変数設定(推奨)
        localizeStringEvent.StringReference.Arguments = new object[] { 5 };
        localizeStringEvent.RefreshString();
    }
}

Smart Stringsの変数: {0}{1}の形式で埋め込み、Arguments配列の順序で値が設定されます。名前付き変数を使う場合はLocalizedString.Add()でVariableを追加します。

言語の切り替え

using UnityEngine.Localization.Settings;

public void ChangeToJapanese()
{
    var locale = LocalizationSettings.AvailableLocales.GetLocale("ja");
    LocalizationSettings.SelectedLocale = locale;
}

非同期での切り替え

IEnumerator Start()
{
    yield return LocalizationSettings.InitializationOperation;
    ChangeToJapanese();
}

テスト方法

Game Viewでの言語切り替え

  1. Game Viewの上部ツールバーにLocaleドロップダウンが表示される
  2. クリックして言語を切り替え
  3. 実行中でもリアルタイムで確認可能

Previewウィンドウ

  1. Window > Asset Management > Localization Tablesを開く
  2. テーブルを選択
  3. エントリをクリックするとPreviewが表示される
  4. 各言語の表示を確認

スクリプトからのテスト

#if UNITY_EDITOR
[UnityEditor.MenuItem("Debug/Switch to Japanese")]
static void SwitchToJapanese()
{
    var locale = LocalizationSettings.AvailableLocales.GetLocale("ja");
    LocalizationSettings.SelectedLocale = locale;
}

[UnityEditor.MenuItem("Debug/Switch to English")]
static void SwitchToEnglish()
{
    var locale = LocalizationSettings.AvailableLocales.GetLocale("en");
    LocalizationSettings.SelectedLocale = locale;
}
#endif

CSVでの管理

CSVのエクスポート

  1. Localization Tablesウィンドウでテーブルを選択
  2. 右上のメニューからExport > CSV...を選択

CSVのインポート

  1. Localization Tablesウィンドウでテーブルを選択
  2. 右上のメニューからImport > CSV...を選択

Google Spreadsheets連携

Google Spreadsheets Serviceを使用すると、翻訳者との協業がさらにスムーズになります。

セットアップ手順

  1. Package ManagerからGoogle Sheets for Unityをインストール(Samples内)
  2. Google Cloud Consoleでサービスアカウントを作成
  3. JSONキーをダウンロードしてプロジェクトに配置
  4. Localization SettingsでGoogle Sheets Serviceを追加
  5. 認証情報を設定

詳細: Google Spreadsheets連携の詳細な手順は、Unity公式ドキュメントを参照してください。

Addressables統合

ビルドサイズへの影響

多言語対応を行うと、すべての言語のテキストやアセットがビルドに含まれるため、ビルドサイズが大幅に増加 します。特に以下の場合に顕著です:

  • 多数の言語をサポートする場合
  • 言語ごとに異なるフォントを使用する場合
  • 音声やテクスチャなどの大きなアセットをローカライズする場合

Addressablesと統合することで、この問題を解決できます。 大規模プロジェクトでは、Addressablesと統合することで必要な言語のみをダウンロードできます。

設定方法

  1. Addressablesパッケージをインストール
  2. Localization Settingsを開く
  3. Asset DatabaseからAddressablesに変更
  4. 各Localeを個別のAddressableグループに配置

メリット

  • ダウンロードサイズ削減: 必要な言語のみをロード
  • オンデマンドロード: 言語切り替え時に必要なアセットのみ取得
  • リモート配信: CDNからの言語パック配信に対応

まとめ

Unity Localizationパッケージは、Unityプロジェクトを多言語対応するための強力なツールです。

  • テキスト、画像、音声のローカライズ - String TableとAsset Tableで管理
  • Smart Strings - 動的に変化する文字列も各言語の文法に合わせて自然にローカライズ
  • CSV/Google Spreadsheets連携 - 翻訳者との協業がスムーズ
  • Addressables統合 - 必要な言語のみをロードしてダウンロードサイズを削減

グローバル市場への展開を考えているなら、ぜひUnity Localizationパッケージを活用してください。

さらに学ぶために