给Unity游戏请一位“同声翻译“:XUnity.AutoTranslator游戏翻译10分钟上手指南
2026/8/26 5:59:34 网站建设 项目流程

给Unity游戏请一位"同声翻译":XUnity.AutoTranslator游戏翻译10分钟上手指南

【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator

还在为日语、英语Unity游戏里的剧情对话发愁吗?XUnity.AutoTranslator是一款开源的Unity游戏自动翻译插件,能在游戏运行的同时实时翻译对话与菜单,把"啃生肉"变成"听母语"。无论你是普通玩家还是模组爱好者,10分钟就能让它跑起来。

那个"什么都好,就是看不懂"的时刻

很多好游戏,死在了语言门槛上。

你心心念念下载了一款Unity引擎的日系RPG,开场动画很惊艳,但角色一张嘴,你只认识零星几个汉字;想玩某个英语视觉小说,生词多到查词典比玩游戏还久;更难受的是,很多小众作品压根没有汉化组接手,等汉化 = 遥遥无期。

于是你试过这些土办法:

  • 截图翻译:一段对话截三次屏,翻完上一句下一句已经过去了,手忙脚乱;
  • 网页机翻:把剧情复制出来粘进去,翻译结果比原文还难懂;
  • 打汉化补丁:版本一更新,补丁立刻失效,还得重新等。

如果你也经历过这些,这篇就是为你写的。

XUnity.AutoTranslator的思路完全不同:与其"翻译给你看",不如让游戏直接说你的语言。它像是给游戏请了一位同声翻译——游戏说一句,它翻一句,而且第一遍翻过之后还会"记住",之后越玩越快。

它不是翻译器,而是一条"翻译管道"

很多人第一次听到"自动翻译插件",第一反应是"这不就是个套了翻译接口的壳吗"。

如果只是把文本丢给翻译服务再读回来,那确实没什么了不起。XUnity.AutoTranslator真正值得玩味的地方,在于它把"翻译"做成了一条完整的管道,而不是一个孤立的动作:

  1. 钩子(Hook):在游戏把文本写到屏幕的那一刻拦截住它——UGUI、NGUI、TextMeshPro、TextMesh、IMGUI 等常见文本框架都在覆盖范围内;
  2. 查缓存:先翻本地翻译文件,命中了直接显示,这一步根本不上网
  3. 调端点:缓存没命中,才把文本交给翻译服务(Google、Bing、DeepL、百度等任选其一);
  4. 回填+存档:译文写回游戏界面,同时存进本地文件,下次同样的句子秒出。

【示意图:XUnity.AutoTranslator的翻译数据流——游戏文本出现→钩子拦截→查询本地翻译缓存→未命中则请求翻译端点→译文回填显示并写入缓存】

把这条管道和另外两条主流路线放在一起对比,差异就很明显了:

方案实时性对游戏版本网络依赖可定制性
截图+OCR翻译差,边玩边切无要求几乎没有
替换式汉化补丁强依赖,版本一更新就失效低,只能等汉化组
XUnity.AutoTranslator弱依赖,通吃大部分Unity游戏仅首次翻译高,可手动精修

它经久不衰的秘密就藏在这里:它不修改游戏文件,只是"接住"文本。所以游戏升级、换版本之后,它通常还能继续工作,这是替换式补丁做不到的。

10分钟跑通第一次翻译

先别碰高级设置。我们的目标很朴素:在10分钟内看到游戏里的日文变成中文

姿势一:ReiPatcher独立安装(新手最省事)

如果你不想折腾任何mod管理器,选这条路:

  1. 从发布页下载XUnity.AutoTranslator-ReiPatcher-{版本}.zip
  2. 解压到游戏根目录,让SetupReiPatcherAndAutoTranslator.exe和游戏exe躺在一起;
  3. 双击运行这个exe,ReiPatcher会自动完成补丁装配;
  4. 用生成的"游戏名 (Patch and Run)"快捷方式启动游戏;
  5. 之后直接点游戏exe启动即可。

整个过程不需要预装任何东西,这是让插件"跑起来"的最短路径。

姿势二:BepInEx插件方式(功能最全,推荐)

如果游戏本来就在用BepInEx,那就更简单了:

  1. 下载XUnity.AutoTranslator-BepInEx-{版本}.zip
  2. 解压到游戏目录,让DLL落进BepInEx/plugins/XUnity.AutoTranslator/
  3. 正常启动游戏。

首次启动后,插件会在游戏根目录生成一个AutoTranslator文件夹,这就是它的"工作台":

游戏根目录/ └── AutoTranslator/ ├── Config.ini ← 所有配置都在这 └── Translation/ └── zh-CN/ └── Text/ ← 翻译文件都在这

打开Config.ini,只需要改两个最关键的地方:

[General] Language=zh-CN ; 目标语言:简体中文 FromLanguage=ja ; 游戏原文是日语

保存、重启游戏。如果日语对话开始变成中文,恭喜,管道通了。按ALT+0随时开关翻译界面,按ALT+T对比原文和译文。

💡实用技巧:第一次运行别急着调一堆参数,先让默认配置跑一局,观察哪些文本没翻译、哪里卡顿,再对症下药——盲目开满所有选项反而会引入新问题。

如果你是想从源码自己构建(比如想改翻译逻辑、研究实现),克隆仓库的命令是:

git clone https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator

翻译质量三件套:语言、端点、框架开关

跑通之后,下一个问题几乎是必然的:"为什么有的句子翻得像样,有的句子像机翻灾难现场?"

排除游戏文本本身写得太碎的极端情况,绝大多数质量问题的根源只有三个,我们一个一个治。

第一件:语言对别偷懒用 auto

FromLanguage=auto看起来很智能,但自动识别偶尔会翻车——尤其当文本里混着片假名、英文缩写时。能明确就明确,游戏原文是什么语言就填什么:

[General] Language=zh-CN FromLanguage=ja

第二件:端点不是越贵越好,是越"合身"越好

翻译质量的大头,其实在端点选择。插件内置了十几种翻译服务,大致分三类:

类型代表端点特点
免费无认证GoogleTranslate、BingTranslate、DeepLTranslate、Papago即开即用,但服务随时可能变化
需密钥BaiduTranslate、Yandex、GoogleTranslateLegitimate、BingLegitimate稳定、有免费额度,适合长期用
本地/自建ezTransXP、CustomTranslate离线可用,或接入自己的翻译服务

几点实打实的建议:

  • 想省事:先用默认的GoogleTranslate
  • 追求译文自然:试试DeepLTranslate,质量公认好,免费无认证;
  • 中文语境、有百度账号:BaiduTranslate,注册后有免费额度,对中文翻译友好;
  • 在意隐私、不想联网:CustomTranslate可以指向你自己搭建的翻译服务。

切换端点就一行配置:

[Service] Endpoint=DeepLTranslate

💡实用技巧FallbackEndpoint=可以配一个"备胎端点"——主端点某次翻译失败时自动顶上,减少"这句没翻出来"的尴尬。

第三件:文本框架开关,按需打开

插件默认只开了一部分文本框架:

[TextFrameworks] EnableUGUI=True ; 默认开 EnableNGUI=True ; 默认开 EnableTextMeshPro=True ; 默认开 EnableTextMesh=False ; 3D漂浮文字,默认关 EnableIMGUI=False ; 老式GUI/部分mod界面,默认关

"默认关"不是偷懒,而是这些框架的文本更"碎",容易触发大量请求。如果游戏里有些文字始终不被翻译,八成是框架没开:mod的窗口界面没反应,试试EnableIMGUI=True;3D世界里的漂浮字幕没反应,试试EnableTextMesh=True

改完配置重启游戏,再用ALT+U手动触发一次钩子、ALT+R重载翻译文件,基本就能覆盖绝大多数漏网之鱼。

让翻译"记住"你:手动翻译与正则

自动翻译是"下限",手动翻译才是"上限"。这也是XUnity.AutoTranslator和那些纯在线翻译工具最本质的区别:你翻过的每一句,插件都会存成文件,而你可以在文件里直接改

自动生成的"记忆本"

每次翻译成功后,插件都会把"原文=译文"追加到:

AutoTranslator/Translation/zh-CN/Text/_AutoGeneratedTranslations.txt

这个文件有三大用途:

  1. 第二次运行免联网——同样的文本直接命中本地缓存,翻译速度起飞;
  2. 随时人工修正——把某一行的译文改掉,按ALT+R立刻生效;
  3. 变成你的私有词典——人名、专有名词越攒越多,翻译越来越"懂你"。

手动翻译:优先级更高的"定制本"

直接改自动文件有个隐患:下次生成时可能被覆盖。正确的姿势是——把想精修的条目剪切到自己的txt文件里,放进同一个Text目录。手动文件的优先级高于自动生成文件,插件会读取Text目录下所有txt文件(甚至支持zip压缩包)。

【示意图:翻译文件目录的分层结构——_AutoGeneratedTranslations.txt(自动生成,优先级最低)、Manual目录下的UI.txt/Dialogues.txt/Items.txt(手动精修)、Plugins目录(针对特定mod的翻译)】

正则:对付动态文本的瑞士军刀

游戏里总有"名字+数字"这种不断变化的文本,比如シンプルリング 001シンプルリング 002,逐条翻译会累死人。正则一行搞定:

r:"^シンプルリング ([0-9]+)$"=Simple Ring $1

r:前缀表示这是一条正则规则,$1会把捕获到的数字原样放回译文。

更进阶的是分割正则sr:前缀):有些游戏会把好几段文本拼在一起再显示,导致缓存永远查不中。用分割正则把文本拆开、各自翻译、再拼回去:

sr:"^([0-9]{2}) ([\S\s]+)$"=$1 $2

这样01 シンプルリング02 シンプルリング都能复用同一条シンプルリング=Simple Ring翻译,一举解决"同义不同串"的查询问题。

💡实用技巧:正则虽强,务必克制。放太多、写太宽的正则反而拖慢查询,还可能误伤其他文本,建议只对确实"动态"的文本用正则。相关实现可以在 src/XUnity.AutoTranslator.Plugin.Core/Parsing/ 里看到。

免费端点凭什么能长期活着:一套"克制"的防刷机制

这一节是这个插件最值得敬佩、也最容易被忽略的地方。

用在线翻译服务当端点,本质是在"蹭"别人的服务。如果插件无脑狂刷请求,用不了几天端点就会把你拉黑,整个插件也会名声扫地。XUnity.AutoTranslator为此内置了一整套防刷策略——你可以把它理解为一位很懂礼貌的同声传译

  • 看到新文本,先等1秒确认它不再变化,才发起翻译请求(防止滚动字幕刷屏);
  • 同一时间只发一个请求,绝不并发轰炸;
  • 单次会话请求数有上限(默认最多8000次,单次默认不超过200字符);
  • 每个句子只翻一次——内存缓存+磁盘缓存双保险,绝不重复问第二遍;
  • 多个组件同时请求同一句翻译时,合并成一个请求
  • 内置约2000条常用短语的静态词典(日译英),能本地解决的根本不发请求;
  • 支持端点的批量翻译,一次请求打包多句;
  • 一旦检测到异常(请求积压、连续无结果、反复刷屏),主动停机,宁可不用也不滥用。

这些机制对你个人玩家意味着三件事:

  1. 省流量:玩一晚上,实际发出的翻译请求远比你想象的少;
  2. 更稳定:不容易被端点封禁,插件能长期工作;
  3. 越玩越快:文本都是"翻一次、记一辈子",玩到后期基本秒翻。

顺着这个思路,性能调优其实就一句话:让插件少干活

[Behaviour] MaxCharactersPerTranslation=200 ; 超过200字符的文本直接跳过,别硬翻 EnableBatching=True ; 批量翻译,减少请求次数 UseStaticTranslations=True ; 启用内置静态词典,少发请求

新手最容易踩的五个坑(附逃生路线)

下面五个坑,基本每个新手都会至少踩中一个。我们用故事化的方式提前过一遍。

坑1:翻译出来了,但屏幕上全是"□□□"

  • 症状:中文显示成一排方块。
  • 原因:游戏默认字体里没有中文字形,中文直接"查无此字"。
  • 解药:给文本组件指定一款中文字体。UGUI用OverrideFont,TextMeshPro优先用FallbackFontTextMeshPro(缺字才回退,不影响原字体观感):
[Behaviour] OverrideFont=你的中文字体.ttf FallbackFontTextMeshPro=Fonts & Materials/LiberationSans SDF

💡实用技巧ALT+F可以在"覆盖字体"和"原字体"之间即时切换,用来对比显示效果很方便。

坑2:一翻译,游戏逻辑就乱了

  • 症状:翻完后游戏行为诡异——对话框选项点了没反应、NPC不再正常回应。
  • 原因:有些游戏会读取当前显示的文字做逻辑判断,比如"屏幕上显示'是'就走分支A"。翻译把文字改了,游戏就"认不出来"了。
  • 解药:打开兼容模式,让游戏以为屏幕上的还是原文:
[Behaviour] TextGetterCompatibilityMode=True

判断是不是这个坑很简单:按ALT+T切回原文,如果功能立刻恢复正常,那就是它了。

坑3:多行文本翻得稀碎

  • 症状:一段好好的对话,翻译后被截断、语序错乱。
  • 原因:很多翻译端点会把多行文本的每一行当作独立句子翻译,一个换行符就能毁掉整句。
  • 解药:让插件在翻译前忽略对话中的空白:
[Behaviour] IgnoreWhitespaceInDialogue=True MinDialogueChars=20 ; 超过20字符的文本按"对话"处理,去掉空白再翻译

坑4:译文太长,把界面撑爆了

  • 症状:日文短句翻成中文后变长,按钮文字溢出、重叠。
  • 原因:中文比日文"占地",UI组件没预留空间。
  • 解药:先打开默认的UI自适应,再微调行距:
[Behaviour] EnableUIResizing=True ResizeUILineSpacingScale=0.80

个别顽固组件,还可以用resizer.txt精确控制——把指定路径下的所有文字缩小到50%:

CharaCustom/CustomControl/CanvasDraw=ChangeFontSizeByPercentage(0.5)

坑5:免费端点突然罢工

  • 症状:刚开始翻译正常,某天开始大面积失败。
  • 原因:免费端点本身就是"不稳定"的,服务方随时可能调整接口。
  • 解药:按ALT+Q重启插件(如果它触发了防刷停机);或者干脆换个端点。长期使用建议换成有密钥的端点(百度、Yandex、彩云小译等都有免费额度),再把FallbackEndpoint配上,双保险。

从"会用"到"会做":接下来的路

到这里,你已经不是一个只会点按钮的玩家了。按你的身份选一条路继续走:

如果你是普通玩家

把快捷键刻进肌肉记忆——ALT+0开关界面、ALT+T对比原文、ALT+R重载翻译、ALT+U手动钩子、ALT+F切换字体——然后安心享受游戏。

如果你是翻译爱好者

从手动翻译文件开始你的"精修"之路:把专有名词统一、把关键剧情打磨自然,然后整理成自己的翻译包分享给同好。手动翻译与文本处理的逻辑在 src/XUnity.AutoTranslator.Plugin.Core/Text/ 里都能找到对应实现。

如果你是mod开发者

这个插件为你留好了扩展位:自定义翻译端点(src/Translators/ 下每种端点一个工程,照着现有代码写就行)、查询翻译的公开API,甚至可以让自己的mod界面主动标记"不需要翻译"——给GameObject名字加上XUAIGNORE即可。整套解析管道则集中在 src/XUnity.AutoTranslator.Plugin.Core/Parsing/。

写在最后

把一款游戏翻译成母语,在过去意味着等待一个可能永远不会来的汉化组;现在,XUnity.AutoTranslator把这个过程压缩成了"装插件→改两行配置→玩游戏"。

它并不神奇——翻译质量的上限,最终取决于你为它积累了多少条精修译文。但它确实做到了一件了不起的事:让"语言障碍"从一个无解的问题,变成了一个可以动手解决的小事

现在就去启动那款搁置了很久的游戏吧。这一次,不用再等别人了。

【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询