多言語対応(Localization)

目次

Unreal EngineのLocalization機能に則ったローカライズ方法

ADX2サウンドデータの場合

(1) 多言語対応のキュー及びキューシートの作成

CRI AtomCraft 上で「多言語に対応したキュー及びキューシート」を作成します。
作成方法についてはCRI AtomCraft マニュアルの「多言語対応」をご参照ください。
その後ビルドを行い、acbファイルを出力します。

(2) 言語別フォルダの作成

Unreal EngineプロジェクトのContentフォルダ直下に"L10N"フォルダを作成し、その下に各言語ごとのフォルダを作成します。
例えば日本語と英語と中国語に対応する場合は下記のようにフォルダを作成します。
criware_ue4_035_how_to_localize_on_UE4_official_localization_l10n_tree.jpg

"ja", "en"等のフォルダ名はUnreal Engineの仕様に従います。

(3) 基本となるアセットのインポート

Unreal Engineプロジェクトを開きます。
(1)で作成したacbファイルの内、日本語のものをインポートします。
criware_ue4_035_how_to_localize_on_UE4_official_localization_adx2_step3.jpg

(4) 日本語ローカライズアセット用のフォルダを作成

[キューシートアセットを右クリック]→[Asset Localization]→[Create Localized Asset]→[Japanese]をクリックします。
criware_ue4_035_how_to_localize_on_UE4_official_localization_create_japanese.jpg

すると日本語ローカライズアセット用フォルダが作成され、コンテンツブラウザがその場所に移動します。
criware_ue4_035_how_to_localize_on_UE4_official_localization_japanese_created.jpg
このとき作成されたアセットは不要なので削除します。
※上記作業の目的は適切なフォルダを作成することであり、必ずしも上記方法を採用する必要はありません。
 手動でフォルダを作成しても問題有りません。

(5) 日本語用ローカライズアセットを作成

(1)で作成したacbファイルの内、日本語のものを先ほど作成したフォルダにドラッグ&ドロップしてインポートします。
ただしこのときインポートオプション「New Assets」を「Do Not Create」にしてインポートします。
criware_ue4_035_how_to_localize_on_UE4_official_localization_japanese_a_import_option.jpg
SoundAtomCueSheet アセットのみが作成されればOKです。
criware_ue4_035_how_to_localize_on_UE4_official_localization_japanese_reimported.jpg
今後"L10N"フォルダ以下の SoundAtomCueSheet アセットをリインポートする場合も、インポートオプション「New Assets」を「Do Not Create」にしてインポートしてください。

(6) 英語ローカライズアセット用のフォルダを作成

元々のキューシートアセットの配置場所に移動します。
criware_ue4_035_how_to_localize_on_UE4_official_localization_base_assets.jpg

[キューシートアセットを右クリック]→[Asset Localization]→[Create Localized Asset]→[English]をクリックします。
criware_ue4_035_how_to_localize_on_UE4_official_localization_create_english.jpg

すると英語ローカライズアセット用フォルダが作成され、コンテンツブラウザがその場所に移動します。
criware_ue4_035_how_to_localize_on_UE4_official_localization_english_created.jpg
このとき作成されたアセットは不要なので削除します。
※上記作業の目的は適切なフォルダを作成することであり、必ずしも上記方法を採用する必要はありません。
 手動でフォルダを作成しても問題有りません。

(7) 英語用ローカライズアセットを作成

(1)で作成したacbファイルの内、英語のものをドラッグ&ドロップしてインポートします。
(5)と同様にインポートオプション「New Assets」を「Do Not Create」にしてインポートします。
SoundAtomCueSheet アセットのみが作成されればOKです。
criware_ue4_035_how_to_localize_on_UE4_official_localization_english_reimported.jpg

(8) その他の言語について同手順を繰り返す

その他、対応予定のそれぞれの言語に対して(6),(7)と同様の手順でローカライズアセットの作成を行います。
ローカライズアセットの作成作業は以上となります。

(9) ローカライズアセットの使用方法

キューアセット, キューシートアセットを取り扱う際は、(3)で作成したアセットを使用します。
するとアセットロード時に、言語設定に応じて適切なローカライズアセットがロードされるようになります。
※誤って"L10N"フォルダに配置されているアセットを直接使用してしまうと、言語設定に応じた切り替えが行われないため、ご注意ください。

(10) 言語切り替え方法

実際に言語を切り替える方法 については後述します。

Sofdec2ムービーデータの場合

Sofdec2ムービーデータを各言語向けにローカライズする場合、コンテンツブラウザ上のSofdec2 Movie Sourceのuassetを、対応したい言語向けにAsset Localizationを行うことでローカライズできます。
具体的な手順例としては下記の通りとなります。

(1) ムービーファイルを配置する

まず、ムービーファイルは各言語用ごと下記のディレクトリに配置されているとします。
  • [ProjectDir]/CriWare/ja/SampleMovie.usm
  • [ProjectDir]/CriWare/en/SampleMovie.usm

(2) 言語別フォルダの作成

Unreal EngineプロジェクトのContentフォルダ直下に"L10N"フォルダを作成し、その下に各言語ごとのフォルダを作成します。
例えば日本語と英語と中国語に対応する場合は下記のようにフォルダを作成します。
criware_ue4_035_how_to_localize_on_UE4_official_localization_l10n_tree.jpg

"ja", "en"等のフォルダ名はUnreal Engineの仕様に従います。

(3) 基本となるアセットのインポート

Unreal Engineプロジェクトを開きます。
(1)で配置したムービーファイルの内、日本語のものをインポートします。
今回は下記ディレクトリにインポートしたものとします。
  • [ProjectDir]/CriWare/SampleMovie.uasset
SampleMovie.uassetをアセットエディタで開いた際の[File]→[File Path]は"CriWare/ja/SampleMovie.usm"となります。

(4) 日本語用ローカライズアセットを作成

[SampleMovieアセットを右クリック]→[Asset Localization]→[Create Localized Asset]→[Japanese]をクリックします。
これにより、日本語に対応したSampleMovie.uassetは"/L10N/ja/CriWare"にコピーされます。

(5) 英語用ローカライズアセットを作成

元々のムービーアセットの配置場所に移動します。
次に英語対応のため、[SampleMovieアセットを右クリック]→[Asset Localization]→[Create Localized Asset]→[English]をクリックします。
これにより、日本語用のSampleMovie.uassetが"/L10N/en/CriWare"にコピーされます。
ここで、日本語用のSampleMovie.uassetを英語対応のものに変更します。
"/L10N/en/CriWare"以下にコピーしたSampleMovie.uassetをダブルクリックしアセットエディタを開きます。
[File]→[File Path]に英語に対応したusmファイルへのContent以下からのパス(CriWare/en/SampleMovie.usm)を入力します。

(6) その他の言語について同手順を繰り返す

その他、対応予定のそれぞれの言語に対して(5)と同様の手順でローカライズアセットの作成を行います。
ローカライズアセットの作成作業は以上となります。

(7) ローカライズアセットの使用方法

ムービーアセットを取り扱う際は、(3)で作成したアセットを使用します。
するとアセットロード時に、言語設定に応じて適切なローカライズアセットがロードされるようになります。
※誤って"L10N"フォルダに配置されているアセットを直接使用してしまうと、言語設定に応じた切り替えが行われないため、ご注意ください。

(8) 言語切り替え方法

実際に言語を切り替える方法 については後述します。

実際に言語を切り替える方法

注意
パッケージ化したゲームを実行中の場合のみ、言語を切り替えることができます。
言語を切り替える方法および適切な言語のアセットをロードする方法は次の通りです。

  • (1)「Set Current Culture」ノード/関数 を実行
  • (2)古い言語のアセットがメモリ上から除去されるように取り計らう
    • 具体的には次の3つの条件を満たすようにします。
      • (2-1)古い言語のアセットがRoot化されている場合、それを解除する
      • (2-2)古い言語のアセットがどこからも参照されていない状態にする
      • (2-3)GCが走る
      • ※補足:パーシスタントレベルを遷移すれば(2-2),(2-3)を自動的に満たすことができます。
  • (3)「基本となるアセット」のロード命令を出す

補足1

上記 (1), (2) の手順は逆順でも問題ありません

補足2

Unreal Engine のローカライゼーション機能の挙動は次のようになっています。
  • アセットがメモリ上に配置される際に、現在の言語設定に適したアセットが採用される
そのため、古い言語のアセットがまだメモリ上に配置されている状態で「Set Current Culture」ノード/関数 を実行するだけではアセットの内容が新しい言語のものに切り替わることはありません。
まず古い言語のアセットをメモリ上から除去してから「基本となるアセット」のロード命令を出す必要があります。
Unreal Engine のローカライゼーション機能の挙動が上記のようになっているため、次の2点が言えます。
  • 「基本となるアセット」をロードしたときに例えば「英語と日本語のデータが両方ともメモリに載る」といったことにはなりません。
  • 「Set Current Culture」ノード/関数 実行時に自動的に「古い言語のアセットがアンロードされ新しい言語のアセットがロードされる」といったことにはなりません。

補足3

言語切り替えが成功した場合も、USoundAtomCueSheet::GetFullName() 関数は常に「基本となるアセット」のパスを返します。

AssetGroup機能

例えば「音声は英語で流すが、字幕は日本語で表示したい」というシチュエーションがあるかもしれません。
音声に関するアセットのみを英語に設定し、字幕に関するアセットのみを日本語に設定することができれば実現できそうです。
Unreal Engine には下記二つの機能が用意されています。
  • (A) いくつかのアセットをまとめてグループ化する機能
  • (B) グループ単位で言語を設定する機能
よって、下記のようにすれば「音声は英語で流すが、字幕は日本語で表示したい」という動作を実現できます。
  • (1)
    • AtomキューシートアセットとAtomキューアセットをまとめてグループ化する(以降このグループを「AtomSoundGroup」と呼ぶ)
    • 字幕に関するアセットをまとめてグループ化する(以降このグループを字幕グループと呼ぶ)
  • (2)
    • 「AtomSoundGroup」を英語に設定する
    • 字幕グループを日本語に設定する
「AtomSoundGroup」を作成し、グループ単位で言語を切り替える方法を以下に示します。

(1) AtomキューシートアセットとAtomキューアセットをまとめて「AtomSoundGroup」を作成する

(1-1)
Unreal EngineプロジェクトのConfigフォルダにあるDefaultEngine.iniファイルをテキストエディタで開きます。
下記設定を追加します。
[Internationalization.AssetGroupClasses]
+AtomSoundGroup=SoundAtomCue
+AtomSoundGroup=SoundAtomCueSheet
[Internationalization.AssetGroupCultures]
+AtomSoundGroup=en
(1-2)
Unreal EngineプロジェクトのConfigフォルダにあるDefaultGame.iniファイルをテキストエディタで開きます。
(1-1)と同じ設定を追加します。

(2) グループ単位で言語を設定する

注意
パッケージ化したゲームを実行中の場合のみ、言語を切り替えることができます。
まず、以下のいずれかの方法で言語を設定します。
  • (A) BP上で「Set Current Asset Group Culture」ノードを実行する
  • (B) C++上で「SetCurrentAssetGroupCulture」関数を実行する
今回の例では「Asset Group」に「AtomSoundGroup」を指定します。
この操作以降にロードされるアセットが、先ほど指定した言語に対応したローカライズアセットとなります。
※既にロード済みのアセットが変化することはありませんのでご注意ください。

その他注意点

「Set Current Culture」ノード/関数を使用すると全てのアセットの言語が変更されます。
そのため、「Set Current Culture」ノード/関数使用後に改めて「Set Current Asset Group Culture」ノード/関数を使ってグループ単位で言語を設定し直す必要があります。

Unreal EngineのLocalization機能に依存しないローカライズ方法

CRI Atom Craftで多言語対応用に出力された複数のファイルは同名のキューを有しています。
Unreal Engineアプリケーション実行中に言語切り替えを行う場合、SoundAtomCueのuassetのCueSheetを、使用したい言語に対応しているCueSheetで設定する必要があります。
そして、CueSheetの変更を行ったSoundAtomCueをAtomComponentに再度セットし直すことで、対応したい言語の音声を再生できるようになります。