让任何 Unity 游戏开口说中文:XUnity.AutoTranslator 从零到精通的实战攻略
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
你期待了三个月的一款 Unity 游戏终于发售,兴冲冲打开,却发现满屏日文假名、英文选项和看不懂的技能说明——关掉游戏的那一刻,你心里一定骂了一句:要是能翻译就好了。XUnity.AutoTranslator 正是解决这个问题的终极方案:它是一款面向 Unity 游戏的自动翻译插件,能在游戏运行时实时抓取对话、菜单、提示等所有文本并翻译成你的母语,同时提供了手动精修、字体替换、图片翻译等一整套"把游戏变成母语"的能力。
但先泼一盆冷水:网上的教程大多只告诉你"装好、能用",却没人告诉你为什么装了之后有些文本不翻译、为什么中文全是方块、为什么翻出来的句子读不通。这篇文章不谈源码,只讲实战,按"从能用到好用、从好用到了不起"的顺序,带你一步步把 XUnity.AutoTranslator 玩明白。
一、先让游戏开口说人话:10 分钟跑通自动翻译
对号入座:选择适合你的安装方式
XUnity.AutoTranslator 的安装方式非常多,别纠结,按你游戏已有的模组环境选就行:
| 安装方式 | 适合谁 | 文件放哪 | 说明 |
|---|---|---|---|
| ReiPatcher 独立版 | 游戏还没装任何模组管理器 | 解压到游戏根目录,运行SetupReiPatcherAndAutoTranslator.exe | 免依赖、双击即用,最省心 |
| BepInEx 插件版 | 已装或准备装 BepInEx | BepInEx/plugins/XUnity.AutoTranslator/ | 目前最主流、文档最全 |
| MelonLoader 插件版 | 已装 MelonLoader | Mods/和UserLibs/ | 新版 MelonLoader 用户 |
| IPA 插件版 | 特定游戏必须用 IPA | Plugins/ | 少数老游戏专用 |
| IL2CPP 支持 | 反编译类(IL2CPP)游戏 | 对应 BepInEx 6 或 MelonLoader IL2CPP 版 | 需用 BepInEx-IL2CPP 专用安装包 |
一句话决策:没装过任何模组管理器 → ReiPatcher 独立版;有 BepInEx → 用 BepInEx 插件版。千万别在已有模组管理器的游戏上再装 ReiPatcher 独立版,两者会打架。
完整可复现示例:从下载到看到第一句中文
以 BepInEx 插件版为例,全程跟着做,10 分钟内有结果:
第 1 步:获取插件源码或发行包
git clone https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator也可以直接下载编译好的发行包(XUnity.AutoTranslator-BepInEx-{版本}.zip),两者效果一致,普通玩家直接拿发行包即可。
第 2 步:解压到游戏目录
把压缩包内容解压进游戏根目录,确认关键文件就位:
游戏目录/BepInEx/plugins/XUnity.AutoTranslator/ ├── XUnity.AutoTranslator.Plugin.Core.dll # 插件核心 ├── XUnity.AutoTranslator.Plugin.BepInEx.dll # BepInEx 适配层 ├── XUnity.AutoTranslator.Plugin.ExtProtocol.dll ├── ExIni.dll # 配置文件读写库 └── Translators/ # 各翻译服务插件放这里第 3 步:启动一次游戏,让它自动生成配置
正常启动游戏一次再退出。插件会在BepInEx/plugins/XUnity.AutoTranslator/下自动生成Config.ini(ReiPatcher 独立版则生成在游戏根目录旁)。不要自己手写这个文件,让插件生成再改,格式最保险。
第 4 步:改三行配置,指定语言和翻译服务
打开Config.ini,把这几项改成你想要的(默认源语言是日语、目标语言是英文,改了就对了):
[General] Language=zh-CN ; 目标语言:简体中文,要繁体写 zh-TW FromLanguage=ja ; 源语言:游戏原文是日语;英文游戏改成 en [Service] Endpoint=GoogleTranslateV2 ; 翻译服务,免费无需密钥,先用它跑通第 5 步:启动游戏,验证效果
再次启动游戏,进入有对话或菜单的界面。按下ALT+0呼出翻译状态面板,看到文本被替换成中文,就说明你成功了。再按ALT+T可以在"原文 / 译文"之间来回切换,方便对照。
如果界面还是原文,多半是文本框架没启用,别急,第三章专门解决这类问题。
记住这几个快捷键,立刻提升体验
| 快捷键 | 作用 | 什么时候用 |
|---|---|---|
ALT + 0 | 显示/隐藏翻译状态面板 | 验证插件是否在工作 |
ALT + T | 切换原文/译文 | 对照检查翻译质量 |
ALT + R | 重新加载翻译文件 | 手动改了翻译文件后热更新 |
ALT + U | 手动触发文本钩子 | 默认钩子没抓到的"顽固"文本 |
ALT + F | 切换自定义字体 | 配置了字体覆盖后,对比效果 |
至此,游戏已经"能翻译"了。但机器翻译的质量你懂的——人名翻错、术语乱翻、长句读不通。接下来就是这篇文章的重头戏:把自动翻译变成你的专属汉化。
二、把机器翻译调教成专属汉化:动手改翻译文件
自动翻译有个致命问题:同一句话每次启动都重新请求,费流量还时好时坏。XUnity.AutoTranslator 的解法是——把所有翻过的文本落盘成文件,你随时能改,改完它就是你的翻译。这套"文件系统"才是这个项目最值钱的设计。
翻译文件系统长什么样
首次运行后,插件会生成这样的目录(以 BepInEx 方式为例):
游戏目录/BepInEx/Translation/zh-CN/Text/ ├── _AutoGeneratedTranslations.txt # 自动翻译缓存:所有机器翻译都写这里 ├── _Substitutions.txt # 替换表:进翻译前先做字符替换 ├── _Preprocessors.txt # 预处理:发给翻译服务前修改文本 └── _Postprocessors.txt # 后处理:拿到译文后修改文本规则很简单:
_AutoGeneratedTranslations.txt是插件自动生成的,优先级最低;- 你在
Text/下新建的任何.txt文件(如Manual.txt、Items.txt)都会被读取,且优先级更高; - 同一原文在多个文件里出现时,自动生成的那个永远最后生效——这就是你"纠正"机器翻译的窗口。
最小实操:改一条翻译并立刻生效
它解决什么问题:机器把角色名翻错了,你希望固定成正确译名。
怎么做:在Text/目录新建一个Manual.txt,写入:
マコト=真琴 アイテム屋=道具店保存后,在游戏里按ALT+R热加载,不用重启游戏,新翻译立刻生效。
效果:从此游戏里再出现这两句话,直接显示你写好的译文,既不消耗翻译请求,又 100% 准确。
给特定模组做专属翻译
游戏里装了战斗模组、UI 美化模组?它们的文本经常和主游戏冲突。这时用插件专属翻译:
游戏目录/BepInEx/Translation/zh-CN/Text/Plugins/我的模组Dll名/翻译.txt要点:
- 在
Text/下建Plugins/文件夹; - 每个子文件夹以模组 DLL 文件名(不含扩展名)命名;
- 文件夹内的翻译文件只对该模组的文本生效;
- 文件里写上
#enable fallback,允许该模组的翻译在缺失时回退到全局翻译。
效果:模组文本和游戏本体互不干扰,一套翻译文件可以随模组分发给其他玩家。
手动翻译可以做到 100% 准确,但前提是你得知道游戏里每句话原文是什么。别急——自动生成的缓存文件已经把原文和译文一一列出来了,你要做的只是"挑刺改错",而不是从零翻译。
三、治服漏网之鱼:动态文本、模组 UI 和疑难句式
正则表达式:一网打尽动态文本
游戏中大量文本是"动态拼接"的,比如等级 35、物品 #12、金币 9999。这类文本每次数值都变,无法逐条翻译,但它们的模式固定。这时用正则表达式翻译,一行规则覆盖无数条文本。
在任意翻译.txt文件中写入(键以r:开头即为正则):
r:"^等级 ([0-9]+)$"=等级 $1 r:"^アイテム ([0-9]+)$"=道具 $1 r:"^お金: ([0-9]+)G$"=金币: $1G效果:$1是捕获组占位符,运行时会把原文中的数字原样带回译文。等级 35、アイテム 7从此稳定翻译,且不再消耗翻译请求。正则规则位于项目的src/XUnity.AutoTranslator.Plugin.Core/Parsing/目录中,有心人可以研究更多高级玩法。
用替换表修正顽固专有名词
有些词(人名、地名、技能名)不管哪家翻译服务都翻不好,而且每次翻译都白烧流量。用_Substitutions.txt在翻译之前就把它换掉:
カズマ=和真 アクア=阿库娅更进阶的用法是参数化替换——原文中夹着会变的片段时,用{{A}}占位:
私は{{A}}=我是{{A}}效果:私は勇者会被翻译成我是勇者且结构稳定,比直接扔给机器翻译靠谱得多。
预处理与后处理:对译文做"美容"
_Preprocessors.txt:发给翻译服务前先改文本,比如把&之类的 HTML 实体还原、把容易翻坏的符号换掉;_Postprocessors.txt:拿到译文后做修正,比如把全角符号统一成半角、把〜替换成~。
格式同样是原文=替换,且支持{{A}}参数化。这俩文件解决的是"机器翻译结果里的小瑕疵",攒多了你会发现翻译质量肉眼可见地变顺。
模组 UI 不翻译?打开 IMGUI
很多模组的设置界面用的是 Unity 的 IMGUI 框架,而它默认关闭(因为太容易误抓文本、浪费请求)。如果你确实需要翻译这类界面,在Config.ini里打开:
[TextFrameworks] EnableIMGUI=True同时可配合[Behaviour]下的BlacklistedIMGUIPlugins,把不需要翻译的模组窗口名列进去排除掉,避免误伤。
到这里,动态文本、模组文本、疑难句式都能拿下了。但很多中文玩家会卡在最尴尬的一步——翻译出来了,全是方块字。下一章解决"显示"问题。
四、让中文真正显示出来:字体、UI 缩放与图片翻译
中文变方块?覆盖字体
Unity 游戏默认字体大多不带中文字形,翻成中文后满屏"□□□"。解决办法是给插件指定一个中文字体。
针对不同文本框架,配置不同:
[Behaviour] ; UGUI 界面用:填你放进游戏目录的字体文件路径(支持 .ttf/.otf) OverrideFont=我的中文字体.ttf ; TextMeshPro 用:优先用 Fallback(只补缺字,不替换原有字体) FallbackFontTextMeshPro=Fonts & Materials/ARIAL SDF效果:OverrideFont会把 UGUI 全部文本换成指定字体;FallbackFontTextMeshPro只在中文字符缺字时才用备用字体,最大限度保留游戏原版观感。改完按ALT+R或重启游戏,方块字立刻变中文。
翻译变长撑爆对话框?交给 UI 自动缩放
中文通常比日文长,翻完后文字溢出、按钮错位很常见。插件默认开启了EnableUIResizing=True,会自动调整文本组件的溢出处理方式;还可以微调行距:
[Behaviour] EnableUIResizing=True ResizeUILineSpacingScale=0.80 ; 行距缩放到 80%,让长文本装得下效果:长译文会自动换行而不是溢出屏幕,配合ALT+F对比字体效果,界面基本能保持原版美感。
图片里的文字怎么翻?纹理翻译
过场 CG、技能图标、地图标记……这些文字是画在图片里的,文本钩子抓不到。XUnity.AutoTranslator 用"纹理翻译"解决:先把游戏纹理导出成图片,你用画图工具把文字 PS 成中文,再放回原位。
先开启导出,让插件帮你把"能翻译的图"导出来:
[Texture] TextureDirectory=Translation\{Lang}\Texture EnableTextureTranslation=True EnableTextureDumping=True ; 导出可替换的纹理,首次开启性能会明显下降,导完就关导出的图片位于Translation/zh-CN/Texture/下,图片文件名带唯一哈希。修改图片后原样放回,游戏内就会自动替换。
效果:连 CG 上的日文都能变成中文,本地化完成度直接拉满。
深度定制:资源重定向
如果游戏把文本打包进了 TextAsset、AssetBundle 等资源文件,可以用资源重定向功能整体替换:
[ResourceRedirector] PreferredStoragePath=Translation\{Lang}\RedirectedResources EnableTextAssetRedirector=True EnableDumping=True ; 把可翻译资源导出到上述目录,改完放回即生效效果:适合制作"完整汉化包"分发给玩家,是资源级替换的终极大招。
显示问题解决了,翻译源也该提上日程了。前面一直用免费的 GoogleTranslateV2,但它偶尔抽风、质量波动,而且国内网络环境不一定连得上。最后一章帮你把翻译源一次选明白。
五、选对翻译源:免费、付费还是本地离线
[Service] Endpoint就是翻译源开关,插件内置了十几种端点,分四类:
| 类别 | 端点示例 | 是否需要密钥 | 特点 |
|---|---|---|---|
| 免费在线 | GoogleTranslateV2、BingTranslate、PapagoTranslate、LingoCloudTranslate | 否 | 开箱即用,偶尔不稳定 |
| 免费但需密钥 | GoogleTranslateLegitimate、BingTranslateLegitimate、YandexTranslate | 是 | 有免费额度(如 Yandex 每月约 1000 万字符),稳定 |
| 付费高品质 | DeepLTranslate(免费版)/ DeepLLegitimate(需 API Key) | 部分需要 | DeepL 译文质量公认顶尖,适合剧情向游戏 |
| 本地离线 | ezTrans XP、LecPowerTranslator15 | 否,但需装对应软件 | 不联网、不烧流量,日韩翻译场景多 |
| 自定义 HTTP | CustomTranslate | 自定义 | 指向你自己的翻译服务 URL,开发者向 |
以质量优先的推荐配置(DeepL 免费版无需密钥):
[Service] Endpoint=DeepLTranslate FallbackEndpoint=GoogleTranslateV2 ; 主服务失败时自动降级,双保险以稳定性优先的配置(Yandex 需去官网申请免费 API Key):
[Service] Endpoint=YandexTranslate [Yandex] YandexAPIKey=你的密钥无论选哪个在线服务,插件都内置了 16 条防刷机制:同一文本 1 秒内不重复请求、单次会话最多 8000 条、同时只发一个请求、连续失败自动熔断……所以你不用担心"翻译请求把服务商打爆"。代价是如果连续出错,插件会自动停机——遇到这种情况按
ALT+Q可尝试重启。
六、常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 完全没有翻译 | 插件没加载 / 配置文件格式坏了 | 检查 DLL 文件是否在正确目录;删掉Config.ini重启游戏让它重新生成 |
| 部分文本不翻译 | 对应文本框架默认关闭 | 在[TextFrameworks]中打开EnableIMGUI/EnableTextMesh,再按ALT+U手动钩取 |
| 游戏崩溃或功能错乱 | 游戏根据显示文本判断逻辑 | 设置TextGetterCompatibilityMode=True |
| 翻译出来全是方块 | 游戏字体不含中文字形 | 配置OverrideFont或FallbackFontTextMeshPro |
| 模组界面不翻译 | IMGUI 未开启 | EnableIMGUI=True,并用BlacklistedIMGUIPlugins排除干扰窗口 |
| 翻到一半插件罢工 | 连续错误触发熔断 | 检查网络/服务可用性后按ALT+Q重启插件 |
| 界面文字溢出错位 | 译文比原文长 | 确认EnableUIResizing=True,并调小ResizeUILineSpacingScale |
| 想翻译但不想联网 | 在线端点总是不稳定 | 换 ezTrans XP 或 LEC 本地离线端点,或自建CustomTranslate服务 |
七、下一步行动建议
如果你是新手:
- 先用 ReiPatcher 独立版或 BepInEx 插件版跑通一次自动翻译,记熟
ALT+0、ALT+T、ALT+R三个快捷键; - 打开
_AutoGeneratedTranslations.txt,把游戏里最常出现的 20 句话改成你满意的译文; - 遇到方块字先别慌,优先配置
FallbackFontTextMeshPro看缺字是否解决。
如果你是进阶用户:
- 为你的游戏整理一套分层翻译文件(
Manual/UI.txt、Manual/Dialogues.txt、Manual/Items.txt),告别一团乱麻; - 用正则表达式覆盖游戏中的动态文本,观察
_AutoGeneratedTranslations.txt里请求量的下降; - 尝试纹理翻译:开启
EnableTextureDumping导出图片,PS 修改主菜单等关键界面。
如果你是开发者:
- 研究
src/Translators/CustomTranslate/目录,用任意语言实现一个符合?from=&to=&text=规范的 HTTP 翻译端点; - 阅读
src/XUnity.AutoTranslator.Plugin.Core/下的端点接口,为你的团队或社区实现自定义ITranslateEndpoint; - 借助
TranslationRegistryAPI,把你的翻译文件直接嵌入自己开发的模组中,随模组分发给用户。
写在最后
XUnity.AutoTranslator 最动人的地方在于:它不只是一个"翻译插件",而是一套完整的游戏本地化工作流——自动翻译负责"快",翻译文件系统负责"准",字体与纹理替换负责"美",十余种翻译源负责"稳"。从你按下ALT+0看到第一句中文开始,到最终打磨出一份属于自己的完整汉化包,这个过程本身就是把一款"别人的游戏"变成"你的游戏"的奇妙旅程。
记住两件事:好的翻译需要耐心,机器翻完、人工打磨才是正道;以及,这个项目仍在活跃更新,新版本常带来性能改进和新端点支持,记得定期关注它的发布动态。现在,关掉这篇教程,去打开那款让你心痒已久的游戏吧——它正在等你说一句:"这回,我看得懂了。"
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考