Unity全般のゲームをリアルタイムで日本語に翻訳する方法です。当然対応できないゲームなどもありますので、その辺はご了承ください。
実際に変換している動画
まずはリアルタイム変換がイメージできないかと思うので参考動画です。リアルタイムで変更してるのが分かるかと思います。一度変更したら次からは変換されてるので、変換を待つ必要がありません。またテキストを任意に変更できるので、翻訳が気に食わなければ自分で修正したテキストを反映することもできます。
やり方1:ReiPatcher(スタンドアローン)で動かす方法!
まずはシンプルに他のプラグインを使わないスタンドアローンの解説になります。
Above Snakes: Prologueの日本語化済みのファイルが欲しい方は下記ページで配布しております。
https://gamersbox.net/above-snakes/5898/
今回使用したゲーム「Above Snakes: Prologue」
まずはUnityエンジンを使ってる下記のゲームのデモ版をダウンロードします。このゲームでなくても良いのですが、今回はこちらで行います。
リンク先にある右下の「Releases」から2つのファイルをダウンロードします。
ダウンロードするファイル
・XUnity.AutoTranslator-ReiPatcher-5.x.x.zip
リンク:https://github.com/bbepis/XUnity.AutoTranslator/
ダウンロードしたzipファイルを解凍して「SetupReiPatcherAndAutoTranslator.exe」をゲームがインストールされているフォルダーに置きます。
「SetupReiPatcherAndAutoTranslator.exe」をダブルクリックするとインストールが自動で始まります。
インストールが完了したら「Above Snakes (Patch and Run)」と言うショートカットアイコンをクリックしてゲームを起動します。一度起動したら終了します。
すると「AutoTranslator」のフォルダーが新たに生成されます。
「AutoTranslator」フォルダーの中の「Config.ini」をテキストエディターで開きます。
Config.iniの中の下記の箇所を下記の様に編集します。
[Service]
Endpoint=GoogleTranslateV2
[General]
Language=ja
FromLanguage=en
[Behaviour]
OverrideFontTextMeshPro=arialuni_sdf_u2019
これで完了です。
あとはゲーム内でテキストが自動で日本語に翻訳されます。翻訳されたテキストデータは「AutoTranslator」の下記フォルダに入っています。こちらファイルを編集することで、日本語の修正も行うことが出来ます。一度翻訳されたテキストはこちらから読み込むので、変換の遅延がなくなります。
AutoTranslator\Translation\ja\Text
_AutoGeneratedTranslations.txt
テキストファイルを共有すれば、みんなで日本語化もできるかと思います。
他のゲームを使用して文字化けが生じる場合は、Melonloaderの方に記載してある、フォントの「arialuni_sdf_u2019」を入れてみてください。
やり方2:MelonLoaderを使って動かす方法!
こちらはスタンドアローンのReiPatcherを使って動かなかった場合に使ってみてください。
今回使用したゲーム
まずはUnityエンジンを使ってる下記のゲームのデモ版をダウンロードします。このゲームでなくても良いのですが、今回はこちらで行います。気づいたらデモ版がなくなっておりました。スタンドアローンで紹介したAbove Snakes: Prologueでも問題ございません。
ダウンロードするアプリ
リンク先の右下の「Releases」からファイルをダウンロードします。
MelonLoaderの動作に必要なもの
こちらを先にダウンロードしてインストールしてください。
.NET Framework 4.8 Runtime
https://dotnet.microsoft.com/download/dotnet-framework/net48
Microsoft Visual C++ 2015-2019 Re-distributable
https://aka.ms/vs/16/release/vc_redist.x64.exe
MelonLoaderのダウンロード
MelonLoader.Installer.exe
https://github.com/LavaGang/MelonLoader/
XUnity.AutoTranslatorのダウンロード
TMP_Font_AssetBundles.zip
XUnity.AutoTranslator-MelonMod-5.x.x.zip
https://github.com/bbepis/XUnity.AutoTranslator/
インストール
ダウンロードした「MelonLoader.Installer.exe」を起動して、「Unity Game:」にゲームの起動ファイルを選択して「INSTALL」をクリックしてMelonLoaderをインストールする。
続いて、「XUnity.AutoTranslator-MelonMod-5.x.x.zip」を解答する。
解凍したファイルをゲームディレクトリに入れる。
TMP_Font_AssetBundles.zipを解凍する。
TMP_Font_AssetBundles.zipに入ってる「arialuni_sdf_u2019」をゲームディレクトリに入れる。
ゲームを一度起動して、すぐに終了します。するとゲームディレクトリに「AutoTranslator」のフォルダーが作成されていると思います。
「AutoTranslator」フォルダーの中の「Config.ini」をテキストエディターで開きます。
Config.iniの中の下記の箇所を下記の様に編集します。
[Service]
Endpoint=GoogleTranslateV2
[General]
Language=ja
FromLanguage=en
[Behaviour]
OverrideFontTextMeshPro=arialuni_sdf_u2019
これで完了です。
あとはゲーム内でテキストが自動で日本語に翻訳されます。翻訳されたテキストデータは「AutoTranslator」の下記フォルダに入っています。こちらファイルを編集することで、日本語の修正も行うことが出来ます。一度翻訳されたテキストはこちらから読み込むので、変換の遅延がなくなります。
AutoTranslator\Translation\ja\Text
_AutoGeneratedTranslations.txt
テキストファイルを共有すれば、みんなで日本語化もできるかと思います。
別のUnityゲームで出来ない場合
出来ない場合はIL2CPPの可能性があります。「XUnity.AutoTranslator-MelonMod-IL2CPP-x.x.x.zip」を使用してみてください。
それでも出来ない場合、XUnity.AutoTranslatorのバージョンを下げてみる。5.1.0で動かなかったが5.0.0で動いたゲームもあります。
それでも出来ない場合はあきらめてください。現状そのゲームには対応してない可能性があります。
キーマッピング
以下の主要なインプットがマッピングされています。
- ALT + 0: XUnity AutoTranslator UIを表示させます。(Oではなくゼロです)
- ALT + 1: 翻訳アグリゲーターのUIを表示させます。
- ALT + T: このプラグインで提供されるすべてのテキストの翻訳版と未翻訳版を交互に表示します。
- ALT + R: 翻訳ファイルを再読み込みします。テキストやテクスチャファイルをその場で変更する場合に便利です。すべてのテクスチャで動作することを保証するものではありません。
- ALT + U: 手動フック。デフォルトのフックでは、常にテキストをピックアップすることはできません。これは、手動でルックアップを試みます。有効になっていないフレームワークからのテキストコンポーネントをフックしません。
- ALT + F: OverrideFontが設定されている場合、オーバーライドされたフォントとデフォルトのフォントが切り替わります。
- ALT + Q: プラグインがシャットダウンされた場合、プラグインを再起動します。これは、翻訳エンドポイントに対する連続したエラーのためにプラグインがシャットダウンされた場合にのみ動作します。問題を解決したと信じるに足る理由がある場合にのみ使用すべきです (例えば VPN のエンドポイントを変更したなど) さもなければ、再びシャットダウンしてしまいます。
テキストの編集
下記を上手く使えば翻訳をある程度制御できるかも。
- _Substitutions.txt: 正規表現に基づいてテキストを翻訳するためのもので、翻訳前に実行されます。
- _Preprocessors.txt: 翻訳前にテキストを変更するためのもので、翻訳前に実行されます。
- _Postprocessors.txt: 翻訳後にテキストを変更するためのもので、翻訳後に実行されます。
その他
今回はMelonLoaderを使っていますが、BepInExでも使用することができます。他にもDeepLを使ったりフォントサイズを変更したりなど色々できますので、詳しくは下記を見てください。
https://github.com/bbepis/XUnity.AutoTranslator
正規表現の使い方
この自動翻訳を使い込んでくると、数値の部分が変わる度に翻訳テキストを生成していくのをどうにかしたい時に役立つのが正規表現です。
例えば「Lv : 1=レベル1」「Lv : 2=レベル2」などレベルが上がる度にテキスト生成するので、この場合はMAXレベルが100だった場合は100通りのテキストを作る必要があります。その場合は下記の正規表現を使うことで、1つの変換テキストにまとめられます。
r:"^Lv : ([0-9]+|[0-9]+|[0-9]{3})$"=レベル:$1
上記の様に書くと1つのテキストでレベル100まで対応できます。これは他にもアイテムの購入や売却、敵へのダメージなどあらゆる応用ができます。
小数点がある場合は下記の様に書けば問題ありません。
r:"^Hunger + ([0-9]+.[0-9]+)$"=空腹 + $1
こんな表現もあります。
r:"^Extra chance for a rare catch: (\d+\.\d+|\d+)%$"=レアな物を狙う追加のチャンス:$1
武器名+攻撃力、「Sword:12」「Axe:16」などは下記の様に書く
r:"^(.+):([0-9]+|[0-9]+|[0-9]{3})$"=$1:$2
SwordとAxeを剣と斧に変えたい場合は下記の様に書く
Sword=剣
Axe=斧
r:"^(.+):([0-9]+|[0-9]+|[0-9]{3})$"=$1:$2
(.+)を使って数字を変換することも出来ます。例「BLEED:1500/2000ml」
r:"^BLEED:(.*)/(.*)ml$"=血液:$1/$2ml
数値の前に+-と付けたい。例「fire resistance: +10」数値は(\d+)でも表現できます。
fire resistance=炎耐性
r:"^(.*):([\+\-]?\d+)$"=$1:$2
正規表現で調べると色々出てきます。
起動時にランチャーを挟むゲームで試したのですがどうも上手くいきません。何かいい方法を知っていますか?