日文游戏啃不动?XUnity.AutoTranslator 让 Unity 游戏在3分钟内开口说中文
日文游戏啃不动?XUnity.AutoTranslator 让 Unity 游戏在3分钟内开口说中文
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
如果你玩过日文原版游戏,一定经历过这样的时刻:剧情正到高潮,满屏假名扑面而来,你只能对着截图逐句查词典,等翻译软件出结果时,那股情绪早就凉了一半。XUnity.AutoTranslator 就是为解决这件事而生的——它是一款专为 Unity 游戏打造的实时自动翻译插件,能识别游戏内正在显示的文本,即时调用翻译服务,把译文直接替换到画面上,让你像读母语一样继续玩下去。
这篇文章不打算按"安装→配置→FAQ"的说明书顺序讲。我把它写成一次真实的"通关记录":从你第一次把它装进游戏,到踩过的坑,再到把它调教到满意的全过程。你跟着走一遍,基本就摸清这个项目的脾气了。
第一次见面:它到底是怎么"看见"游戏文字的?
先别急着动手,花 30 秒理解一件事:Unity 游戏里的文字并不是"画"在屏幕上的图片,而是由 UGUI、NGUI、TextMeshPro 这类 UI 框架动态渲染出来的文本组件。XUnity.AutoTranslator 的思路很直接——它往这些文本组件的更新逻辑里插入"钩子",只要游戏准备显示一段新文字,钩子就先把它拦下来,查一下翻译缓存,有结果就直接换掉,没结果就排队交给翻译引擎。
这就是它最核心的价值:你不改游戏文件,不动存档,插件在你和游戏之间当了个"即时翻译官"。
项目目录里有几个名字你以后会常碰到:XUnity.AutoTranslator.Plugin.Core是核心库,负责钩子、缓存和翻译调度;Translators文件夹下则是各家翻译引擎的独立插件,比如 Google、Bing、DeepL、Papago,想换引擎就换对应的 dll。
第一关:3分钟跑通,先让它"出声"
别追求完美配置,先让翻译转起来,后面再慢慢调。最省事的路径是 ReiPatcher 独立安装,它不依赖任何外部框架:
- 从项目仓库下载
XUnity.AutoTranslator-ReiPatcher-{VERSION}.zip - 解压到游戏根目录,确保
SetupReiPatcherAndAutoTranslator.exe和其他 exe 同级 - 双击运行安装程序,等它配置完毕
- 用生成的
{游戏名} (Patch and Run).lnk快捷方式启动游戏
第一次启动会慢几秒,因为它在做两件事:打补丁,以及生成配置文件。这一步最关键——配置文件名是AutoTranslatorConfig.ini,它决定了后面的一切。
如果你已经在用 BepInEx 框架,那就更简单了:下载XUnity.AutoTranslator-BepInEx-{VERSION}.zip,解压进游戏目录(插件 dll 会自动落到BepInEx/plugins/XUnity.AutoTranslator),启动游戏即可。MelonLoader、IPA、UnityInjector 用户同理,各自有对应的安装包,README 里都写得很清楚。
启动后按ALT+0,屏幕一角会弹出设置窗口。看到它,恭喜,第一关过了。
第二关:认识那四个热键,比配置更重要
在动手改配置前,先把这四个快捷键按一遍,它们是你后面排错的主力:
ALT+0:打开/关闭设置界面ALT+T:在原文和译文之间切换显示ALT+R:重新加载翻译文件,改完文本文件不用重启游戏ALT+U:手动触发文本钩子,自动钩子没抓到的文字用它补救
ALT+T这个键特别值得记牢。当你怀疑"这句是不是没翻译",按一下它,原文立刻显示出来——这是最快判断问题出在"没翻译"还是"翻译了没显示"的办法。
第三关:读懂配置文件,你就赢了80%
打开AutoTranslatorConfig.ini,核心就三个区块,其余大部分保持默认即可:
[Service] Endpoint=GoogleTranslateV2 ; 翻译引擎,想换就换这里 [General] Language=zh-CN ; 目标语言,中文 FromLanguage=ja ; 游戏原文语言,日语 [TextFrameworks] EnableUGUI=True ; UGUI,多数 Unity 游戏默认用这个 EnableTextMeshPro=True ; TextMeshPro,另一大主流 EnableNGUI=True ; NGUI,老游戏常见 EnableTextMesh=False ; 3D 漂浮文字,默认关 EnableIMGUI=False ; 老式即时模式 UI,默认关第一个坑通常就出在这里:有些框架默认是关闭的。游戏跑起来大部分文字翻译了,某个菜单还是原文——别慌,多半是那个界面用的框架没启用。README 里明确提醒过这一点,翻译不完整时优先回来看看这里。
改完配置按ALT+0在设置界面切换一下,或者重启游戏让它重新读取。
第四关:当翻译质量开始让你皱眉
跑通之后,你大概率会碰到第二个问题:翻译能用,但总有几个名字、几个术语翻得不对。别急着换引擎,先用项目自带的四件套文本文件,它们的路径都在配置的[Files]区块里:
_AutoGeneratedTranslations.txt:自动生成的翻译记录,它的优先级最低,用来当底稿_Substitutions.txt:替换规则,适合修人名、专有名词——把常被翻错的名字固定下来_Preprocessors.txt:发给翻译引擎前的文本预处理_Postprocessors.txt:拿到译文后的后处理
举个例子,游戏里角色名"シンプルリング"老被译成奇怪的词,你就在_Substitutions.txt里写:
シンプルリング=Simple Ring保存后按ALT+R,立刻生效,不用重启游戏。
更进阶一点,文本文件还支持正则。项目提供了两种前缀,这个设计相当巧妙:
r:"^アイテム ([0-9]+)$"=物品 $1r:是标准正则——直接匹配整段文本,捕获组用$1引用。适合"物品 12"这种规律性文本,一条规则覆盖所有编号。
sr:"^([0-9]{2}) ([\S\s]+)$"=$1 $2sr:是拆分正则——游戏有时会把多段文字拼在一起显示(比如装备名前加序号),你先用正则在翻译前把它拆开,逐段翻译后再拼回去。这样文件里只需维护一条シンプルリング=Simple Ring,所有01 シンプルリング、02 シンプルリング都能命中。要注意的是,正则别滥用,README 反复强调要克制使用,因为它是性能杀手。
第五关:踩坑时刻,报错时优先检查这三个地方
玩到一半突然发现翻译不动了,别慌,按这个顺序排查:
先看是不是被"自保机制"误杀了。这是这个插件相当有性格的设计——为了不把免费翻译服务打到封号,它内置了 16 条防滥用规则:新文本出现后要等 1 秒确认它不再变化才发请求;整个游戏会话最多发 8000 次请求;同一时刻只发 1 个请求,绝不并发;如果连续 5 次请求没返回结果,或者检测到文本每帧都在变(典型的滚动字幕),它会主动停机保护。所以翻译突然停了,先想想是不是触发了保护。如果只是服务端抽风导致停机,解决完问题后按ALT+Q就能重启插件。
再检查日志。BepInEx 用户看BepInEx/LogOutput.log,里面会写明插件加载状态和报错原因。
最后检查网络。免费翻译服务(Google、Bing 这些)不稳定是常态,README 原话是"随时可能失效"。如果某个引擎反复失败,就换一个。[Service]区块里还有个FallbackEndpoint参数,可以设一个备用引擎,主引擎失败时自动顶上。
第六关:进阶玩法,从"能用"到"好用"
中文字体发虚/缺字?这是最经典的坑
很多日文游戏自带字体不含中文字形,翻译成中文后满屏方块。解决办法是字体覆盖,配置里有两个参数:
[Behaviour] OverrideFont=你的字体文件 ; UGUI 专用 FallbackFontTextMeshPro= ; TextMeshPro 专用,推荐用它FallbackFontTextMeshPro的用法比OverrideFontTextMeshPro温和——它只是给 TextMeshPro 加一个"后备字体",原字符缺失时才用它顶上,而不是全盘替换。UI 里中英日混排时体验好很多。
对话框文字太挤?让插件帮你排版
译文通常比原文长,塞进原来的对话框就会溢出。插件默认开启EnableUIResizing=True,它会尽力调整文本组件的溢出方式。如果还不行,可以在翻译目录放一个resizer.txt文件手动控制字号:
CharaCustom/CustomControl/CanvasDraw=ChangeFontSizeByPercentage(0.5)等号左边是组件路径的一部分,右边是命令——上面这行会把该路径下所有文字字号缩到 50%。路径怎么找?README 的建议是配合 Runtime Unity Editor 之类的工具查看,或者开[Behaviour] EnableTextPathLogging=True让插件把文本路径打出来。
有些文字游戏用图片显示,怎么办?
很多老游戏把标题、菜单做成了图片。项目从 2.16.0 起支持图片替换:开EnableTextureTranslation=True和EnableTextureDumping=True,插件会把游戏里的贴图导出到Translation\{Lang}\Texture目录,文件名带哈希后缀。你用 PS 改好图、保留哈希改名存回去,进游戏就会被替换。默认关闭是有原因的——贴图转储对性能影响很大,而且这不是自动翻译,得你手动改图。
想给某个插件单独配翻译?
把翻译文件按插件隔离,放到Translation\{Lang}\Text\Plugins\插件dll名目录下,文件开头加一行#enable fallback,就能让插件专属翻译在未命中时回退到通用翻译。这对翻译模组 UI 特别有用。
第七关:如果你是开发者,这个项目留着有大用
模组作者可以调用它的翻译能力。官方提供了干净的接口,比如异步翻译:
AutoTranslator.Default.TranslateAsync( untranslatedText, result => { if( result.Succeeded ) { var translatedText = result.TranslatedText; } } );同步查缓存:
if( AutoTranslator.Default.TryTranslate( untranslatedText, out string translation ) ) { // 命中缓存 }想给游戏加自己的翻译引擎也不难——实现ITranslateEndpoint接口(就四个属性和两个方法),编译成 dll 丢进Translators文件夹即可。项目源码里就有完整的 Yandex 实现当范例。仓库里src/Translators目录下的各家引擎实现,本身就是最好的学习教材。
最后一句话
从第一次按ALT+0看到设置界面,到把字体、正则、图片替换都调顺,XUnity.AutoTranslator 的每一步都在回答同一个问题:怎么让玩家少受语言折磨。它免费、开源、社区活跃,支持 BepInEx、MelonLoader、IPA、UnityInjector 几乎全部主流框架,连 IL2CPP 游戏也有专门的安装包。
现在就去下载一个安装包,挑一款你一直想玩却啃不动的游戏试试。第一次看到日文原版对话变成中文的那一刻,你会觉得前面这几分钟都值了。遇到问题就回来翻 README——它比任何教程都详尽,里面连防滥用机制的原理、文本查表的四次回退逻辑都写得明明白白。放心,这条路前人已经铺得很平了。
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考