Unity游戏翻译插件XUnity.AutoTranslator完整实战教程:从安装到进阶汉化
Unity游戏翻译插件XUnity.AutoTranslator完整实战教程:从安装到进阶汉化
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
无论你是偶然发现一款冷门神作,还是被朋友安利了一款只支持日文的Unity游戏,XUnity.AutoTranslator都能成为你突破语言关卡的得力助手。这是一款开源的Unity游戏翻译插件,核心能力是实时识别游戏内的文本并自动翻译成你熟悉的语言。本教程会从场景痛点出发,带你完整走一遍安装、配置、进阶自定义和常见问题排查,最后附上直接上手的方式。
一个真实场景:满屏外语的尴尬时刻
想象这样一个晚上:你在某个游戏论坛里刷到一款画风惊艳的Unity单机作品,评论区一片好评。你兴冲冲下载、解压、启动,然后屏幕上弹出了全日文的设置菜单和对话气泡。
这时候通常只有三条路可走:
- 掏出手机逐句拍照翻译,玩一小时游戏要花三小时查词典;
- 在评论区蹲守汉化组发布,但热门游戏可能等半年,冷门游戏可能永远等不到;
- 硬着头皮玩下去,靠猜技能、靠蒙剧情,最后只能放弃。
这条"等待汉化组"的老路,本质上是把主动权交给了别人。而XUnity.AutoTranslator想解决的就是这个问题:让翻译能力直接内嵌到游戏运行过程中,文本出现的同时就完成替换,你不用等任何团队发补丁。
XUnity.AutoTranslator:给Unity游戏配一位"同声传译"
它到底是怎么运作的
理解原理能帮你更好地排错。整个流程可以拆成四步:
- 挂钩(Hook):插件在游戏运行时会拦截文本组件的显示调用,相当于在"游戏要显示一行字"和"这行字真正上屏"之间插入了一道检查;
- 识别:被拦下的文本会经过框架判断、空白处理、缓存比对等一系列筛选,决定它是否需要翻译;
- 翻译:需要翻译的文本会被送去你指定的翻译服务,也可能是先在本地缓存或内置词典里查找;
- 回写:拿到译文后,插件再把结果写回文本组件,你看到的就是翻译后的内容。
核心能力一览
这个项目能长期成为Unity玩家社区的主流选择,靠的是下面这几块硬功夫:
- 多框架兼容:可以挂在BepInEx(官方推荐)、MelonLoader、IPA、UnityInjector这些主流插件管理器下,也可以完全独立运行,不依赖任何外部管理器;
- 翻译引擎丰富:开箱即用支持Google、Bing、DeepL、百度、Yandex、Papago、Watson、LingoCloud等十余种在线服务,还预留了CustomTranslate自定义接口和第三方LLM翻译端点;
- 文本框架覆盖面广:UGUI、NGUI、TextMeshPro、TextMesh、IMGUI、FairyGUI,甚至Utage这类视觉小说引擎都有对应的挂钩实现;
- 缓存与防骚扰机制:内置了约两千条常用日译英短语词典,所有翻译结果会缓存到内存和磁盘,避免同一句话反复请求在线服务;
- 附加能力:正则翻译、手动翻译文件、资源重定向(替换游戏资源而不改动原文件)、纹理翻译(连游戏图片都可以换成汉化版)、UI自适应缩放。
需要提前知道的边界
先说丑话:它需要联网才能提供自动翻译,如果你的网络环境不稳定或不想让游戏产生网络请求,那它帮不上忙。另外,免费在线翻译端点属于"能用但不保证永久可用",服务商一改接口,插件可能随时失效,这是所有同类工具的共同宿命。
快速上手:两条路线任选其一
路线A:BepInEx插件方式(多数玩家的首选)
BepInEx是目前Unity游戏生态里最普及的插件管理器,XUnity.AutoTranslator对它的支持也最完整。流程如下:
- 先给游戏装好BepInEx插件管理器,完成其自身要求的首次启动;
- 获取XUnity.AutoTranslator的BepInEx发布包,把压缩包内容直接解压到游戏根目录,让插件文件落入
BepInEx/plugins/XUnity.AutoTranslator/目录; - 正常启动游戏,插件会在首次运行时自动生成配置文件;
- 进游戏后如果发现某些区域的文本没被翻译,去配置文件里把对应的文本框架开关打开(后面会细说)。
路线B:ReiPatcher独立方式(无依赖,双击即用)
如果你不想碰任何插件管理器,这个项目还提供了自带ReiPatcher的独立安装包,号称"两次点击搞定大部分Unity游戏":
- 把独立安装包解压到游戏目录,让
SetupReiPatcherAndAutoTranslator.exe和其他exe文件放在一起; - 运行它完成打补丁准备工作;
- 使用生成的"游戏名(Patch and Run)"快捷方式启动游戏,之后就可以正常用游戏exe启动了。
需要特别提醒:如果你已经在用受支持的插件管理器,就不要再用这种方式,两套机制叠加容易出问题。
如果你想自己动手研究源码、改配置或跟进最新改动,也可以直接拉取仓库:git clone https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator。
首次启动后的三处关键配置
配置文件是启动时自动生成的。新手只需要先盯住三个地方,其余默认值可以放心保留:
- Endpoint(翻译服务):默认是GoogleTranslate。免费、免注册就能用,但稳定性一般;如果你手头有DeepL或百度翻译的API,换成对应值会更稳;
- Language(目标语言):要翻译成什么语言就填什么,想玩中文版就填
zh; - FromLanguage(源语言):游戏原文是什么语言,比如日文游戏填
ja。虽然部分端点支持auto自动识别,但明确指定通常更靠谱。
另外有个高频困惑要提前讲:为了让文本挂钩更稳妥,IMGUI和TextMesh这两类框架默认是关闭的。如果你发现游戏的某些界面(尤其是其他mod的UI)没被翻译,多半要去[TextFrameworks]段落把EnableIMGUI或EnableTextMesh改成True。
进阶技巧:把翻译质量与体验拉满
快捷键:熟记这几个键就够了
日常使用其实只需要记住几个组合键:
ALT + 0:开关翻译设置界面(注意是数字0);ALT + T:在译文和原文之间来回切换,方便你对照检查翻译质量;ALT + R:立刻重新加载翻译文件,改完翻译文件不用重启游戏;ALT + U:手动触发文本挂钩,默认挂钩没抓到某些文本时用这招补救;ALT + F:配置了自定义字体后,用它切换默认字体和替换字体。
正则翻译与分割器:对付"拼装文本"的利器
很多游戏会把一段话拆成"编号 + 名称 + 数值"的拼接结构显示,直接逐句翻译既费请求又容易出错。这时正则就派上用场了。
标准正则翻译用于精确匹配某类文本模式,以r:开头:
r:"^物品 ([0-9]+)$"=Item $1分割器正则(sr:)则更高级:先把一段复杂文本按模式切开,让每一片各自去查翻译,再拼回去。典型用法是把"01 シンプルリング"这种带编号的文本拆成编号和名称两部分:
sr:"^([0-9]{2}) ([\S\s]+)$"=$1 $2这样你只需要在翻译文件里维护一条シンプルリング=Simple Ring,所有带不同编号的同类文本都能命中。分割器还支持命名分组,配合MaxTextParserRecursion设置甚至可以递归拆分,属于重度玩家才会用到的进阶玩法。
手动翻译文件:机器翻不准,自己来
自动翻译引擎再强,也经常在专有名词和剧情关键句上翻车。项目给了你随时"接管"的机会:所有自动生成的译文都会写进翻译目录下的_AutoGeneratedTranslations.txt,你可以直接编辑这个文件,然后按ALT + R立即生效。
更规范的做法是把需要固定的句子从自动生成文件里剪出来,放进你自己的txt翻译文件,因为自动生成文件的优先级始终最低,同一条目只要出现在其他文件里,就会以你的版本为准。翻译文件还支持放进zip压缩包,方便整理和分发。
翻译作用域:让不同场景用不同译文
如果游戏里同一句文本在不同场景需要不同译法,可以开启翻译作用域功能(EnableTranslationScoping=True),然后在翻译文件中用指令声明范围:
#set level 1,2,3:下面的译文只在场景ID为1、2、3时生效;#set exe game1,game2:下面的译文只在特定游戏进程名下生效;#set required-resolution height > 1280 && width > 720:按分辨率条件限定。
这一功能对多周目、多结局的剧情游戏特别实用,能有效避免翻译冲突。
字体与UI:中文显示不全的解法
很多Unity游戏自带的字体并不包含中文字形,翻译成中文后最常见的现象就是满屏方框或乱码。解决办法是配置字体替换:
OverrideFont:替换UGUI文本的字体;FallbackFontTextMeshPro:给TextMeshPro加一个回退字体,仅当原字体缺字时才用你的字体,这是官方更推荐的方式。
配套的UI自适应(EnableUIResizing)会自动调整文本组件的溢出模式,避免译文比原文长时被截断。你还可以通过resizer.txt文件对特定界面路径做精细控制,比如把某条UI路径下的所有字号缩到50%:
CharaCustom/CustomControl/CanvasDraw=ChangeFontSizeByPercentage(0.5)纹理翻译:连图片一起汉化
菜单、图鉴、漫画式过场里的文字经常是直接画在图片上的,纯文本挂钩无能为力。从较早版本开始,项目就提供了基础的纹理替换能力:开启EnableTextureDumping后,插件会把游戏里的贴图按哈希命名转储到纹理目录,你只要把图片交给修图工具加上中文,再按原名放回去即可。文件名的方括号里藏着两张哈希,分别用于识别贴图身份和判断是否被修改过,所以重命名时务必保留哈希部分。
避坑指南:前人踩过的坑,你少踩几个
翻译不生效,按这个顺序排查
遇到"哪里都没翻译"别慌,按下面顺序过一遍,多数问题能定位:
- 确认配置文件里
Endpoint没有留空,Language和FromLanguage填得对不对; - 确认对应的文本框架开关是开启状态(IMGUI、TextMesh默认关着);
- 按
ALT + U手动触发一次挂钩,排除自动挂钩漏抓的情况; - 换一个翻译端点试试,排除当前服务临时不可用的可能;
- 如果只在一个特定游戏里出问题,检查是不是开了
TextGetterCompatibilityMode反而干扰了它——这个模式只在游戏用"屏幕上显示的文本"来决定逻辑时才需要开。
免费端点说挂就挂,自我保护机制了解一下
在线免费翻译服务说变就变,所以插件内置了相当激进的自我保护策略:同一句新文本会先观察一秒确认不再变化才发起请求;整个游戏会话最多发出8000次请求;同一时间只允许一个请求在途;连续五次请求无结果、或积压翻译超过4000条时,插件会直接自动关闭,防止把游戏拖垮。这些机制是为了你好,遇到"插件自动停了"的情况,先检查自己的网络或翻译服务,再用ALT + Q让它重新启动。
IL2CPP游戏的限制
IL2CPP版本需要配合BepInEx 6的IL2CPP构建版,而且功能上有所取舍:文本挂钩能力较弱、部分文本变化可能检测不到,需要借助辅助插件强制刷新;IMGUI翻译、TextGetterCompatibilityMode、插件专属翻译等功能目前尚不支持。玩IL2CPP游戏前先做好心理准备,别拿Mono版的使用体验去套。
纹理相关开关别乱开
EnableTextureDumping、EnableTextureToggling、DetectDuplicateTextureNames这几个开关都带有明显的性能代价,而且转储出的贴图文件会占用大量磁盘空间。如果你只是给普通游戏加个翻译,保持纹理功能默认关闭就好;就算要做图片汉化,也建议用完就关,别让它们长期开着。
实战心得与下一步行动
把前面的内容串起来看,XUnity.AutoTranslator的定位其实很清晰:它不是替你省掉翻译这件事,而是把翻译的主动权交到你手里。自动翻译负责量大面广的日常文本,正则和手动翻译文件负责精准修正,纹理翻译和资源重定向负责补齐最后的边角,层层叠加,最终效果可以非常接近专业汉化组出品。
对普通玩家来说,从BepInEx路线入手、记住ALT + T和ALT + R两个快捷键、学会改Endpoint和语言三项配置,就已经能覆盖九成需求;对想深耕的玩家,正则分割器和翻译作用域足够你折腾出个性化的汉化体验;对开发者,项目源码里的src/Translators/目录展示了每个翻译端的实现方式,自定义一个翻译服务并非难事。
别让语言再成为你错过好游戏的借口。现在就拉取git clone https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator或直接获取发布包,挑一款吃灰的日文游戏试试,让第一句中文字幕在屏幕上亮起来。
【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考