対応エンジン · Unity
現代日本語インディーおよび同人ゲーム — RPG、ビジュアルノベル、シミュレーションタイトル — の大きな一角が Unity で出荷されます。RuneTranslate は、それらのゲームが外部化するテキストを翻訳します:TextAsset のペイロード(JSON / CSV / TSV / プレーンテキストのシナリオブロブ)と、.assets、level ファイル、AssetBundle(単一バンドルの data.unity3d ゲームを含む)内にパックされた MonoBehaviour 文字列フィールド、加えて StreamingAssets 配下のルーズなスクリプトファイル。バンドルの UnityPy ランタイムがバイナリアセットを読み書きし、すべてプロジェクトごとのワークスペースで行われるので、元のゲームは手を加えられないままです。MonoBehaviour テキストは Mono と IL2CPP の両方のビルドで処理されます — Mono では型ツリーがゲームの Managed/*.dll から来て、IL2CPP では RuneTranslate が GameAssembly.dll + global-metadata.dat から再構築します(ベストエフォート。パース可能なメタデータが必要)。AES-CTR で暗号化された Addressable バンドルも復号し、CJK やその他のスクリプトのために非ラテンのフォールバックフォントを注入します。対象外:ゲームのコード(Assembly-CSharp.dll)にコンパイルされた文字列リテラル。再配布する前に実在のゲームで検証してください。
Unity の VN/RPG スクリプトは通常 JSON や CSV テーブルとして外部化されるので、キャラクター名や繰り返し出る用語が多くの TextAsset にわたって何百回も現れます。プロバイダーはバッチごとに一貫しない言い換えをします。主人公、仲間、繰り返し出る NPC、地名、そして特徴的なスキルやシステム用語を事前に用語集化して、すべての TextAsset と StreamingAssets ファイルがそれらを同一に表示するようにしましょう。 用語集の基本 →
RuneTranslate をゲームディレクトリ(<Name>_Data フォルダを含むもの)に向けます。エンジン検出は globalgamemanagers / data.unity3d / resources.assets を探します。バンドルの UnityPy ランタイムが自動的に使われます — 別途 Python のインストール不要。
RuneTranslate はシリアライズされたファイルをスキャンして、ソース言語の TextAsset と MonoBehaviour 文字列(デフォルトは日本語、プロジェクトごとに任意の対応ソース言語を設定)、加えて StreamingAssets 配下のルーズなスクリプトファイルを探します。構造化されたペイロード(JSON / KAG / HTML)は個々の翻訳可能な行にスライスされるので、ファイル構造が無傷で往復します。
DeepL は物語のセリフに強力なデフォルトです。OpenAI GPT-4o や Anthropic Claude は様式化された話し方やオノマトペをよりうまく扱います。無料の Google Translate やローカルモデル(Ollama / LM Studio)はメニュー文字列やアイテム名をカバーします。プロバイダールーティングは短い文字列を安いレーンに分けられます。
エクスポート時に、RuneTranslate はゲームをコピーし、翻訳済み文字列をアセットファイルと StreamingAssets スクリプトにその場で書き戻します。翻訳済みビルドは元と同じように動きます — 手作業のアセット操作なし。