拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Unity游戏实时翻译插件XUnity.AutoTranslator从安装到配置全攻略

玩 Unity 游戏的朋友应该都体会过这种憋屈Steam 上淘到一个画面、玩法都很对胃口的独立游戏结果一进去满屏英文或者日文直接劝退。找汉化补丁吧冷门游戏基本没人做想用 OCR 机翻窗口切来切去文本还经常识别错。我当初为了解决这个问题折腾过不少工具最后稳定用下来的就是今天要讲的 XUnity.AutoTranslator。这是一个基于 Unity 框架的实时自动翻译插件。它不修改游戏本体文件而是通过运行时注入的方式在游戏进程里“拦截”文本渲染再调用翻译服务把译文替换回去。简单说游戏界面里那些对话、菜单、物品说明会在你毫不知情的情况下被换成中文。安装也不算复杂但里面有几个版本选择和部署方式上的细节新手很容易踩坑。这篇文章就把从下载、安装、配置到排查问题的完整流程讲清楚照着走基本不会出大问题。1. 先说清楚XUnity.AutoTranslator 到底是什么项目1.1 一个能“偷换”游戏文本的 Unity 插件XUnity.AutoTranslator 最早是海外社区为了翻译 Unity 制作的日本同人游戏而开发的工具后来慢慢发展成一个通用的 Unity 游戏文本翻译框架。它的核心原理很有意思Unity 游戏里的文本最终都要通过 Text、TextMesh 这类组件显示到屏幕上插件利用 Harmony 这个库在运行时给这些显示方法打补丁相当于在游戏自己的代码里加了一层“窃听”。每次游戏准备画文字的时候插件会先看看这行字有没有翻译过翻译过就直接换掉没翻译过就先显示原文同时在后台异步请求翻译服务拿到译文后存储下来并刷新界面。整个过程在游戏运行时完成不需要对游戏原文件做任何拆包、修改。所以用它的最大好处之一就是“干净”——不想用了把注入文件删掉游戏恢复原样不像传统汉化补丁那样可能改坏了就回不去。它还支持把翻译结果缓存成文本文件。缓存多了以后很多语句根本不需要再请求线上翻译直接读本地文件就能替换。这个机制对重复对话特别友好同一句话第二次出现基本零延迟。1.2 它和传统汉化补丁、屏幕翻译工具的区别很多人第一次接触这个工具时会有疑问它跟汉化补丁、实时OCR翻译到底有什么本质区别我直接做个对比方式是否修改游戏文件翻译延迟文本覆盖率可逆性传统汉化补丁通常需要修改或替换文件无高但依赖汉化组努力一般可能会改变游戏校验值屏幕OCR翻译不修改0.5秒以上低遇到艺术字、模糊背景基本报废完全可逆XUnity.AutoTranslator不修改运行时注入首次出现有延迟之后秒开高所有Unity文本组件都能捕获完全可逆删文件即还原拿我自己的使用场景来说。以前玩一款冷门的日式RPG汉化组只做了体验版正式版一直没人接。用OCR软件顶着玩战斗对话框里的小字识别得一塌糊涂遇到字体特殊一点的根本没法看。换了 XUnity.AutoTranslator 之后虽然刚进游戏前十几秒有一段“预扫”过程但进入对话后文本替换快得多阅读流畅感完全不一样。1.3 这个工具适合哪些人用如果你是下面这几类人它能派上大用场独立游戏玩家尤其是玩日系同人、欧美小众作品多的冷门游戏没人做汉化实时翻译是最实际的方案。翻译质量虽然达不到人工汉化组的润色水平但应付剧情理解绰绰有余。游戏开发者做 Unity 项目想快速检查多语言版本的效果可以拿它当“临时候翻译”来用在正式接入官方本地化之前先看各语言文本会不会溢出、断行。汉化组技术成员很多汉化组会用这个工具先把全部游戏文本抓出来作为“生肉源”再人工校对导出比自己逆向解析文本资源省太多事。当然它不是万能的。IL2CPP 构建的 Unity 游戏、部分使用特殊字体渲染引擎的游戏它不一定能生效。这一点对后面的安装方式选择影响很大我放到下一节详细说。2. 下载之前先把环境和版本这一关过了2.1 从 GitHub Releases 下载文件怎么认XUnity.AutoTranslator 是开源项目托管在 GitHub 的 bbepis 账号下搜索 “XUnity.AutoTranslator” 就能找到仓库。下载时一定要去项目主页的 Releases 页面找正式发布版本不要直接下载源码 zip 包——源码里面没有编译好的 DLL拿来也用不了。进入 Releases 页面后你会看到类似XUnity.AutoTranslator-BepInEx-4.x.x.zip和XUnity.AutoTranslator-MelonLoader-4.x.x.zip这类文件。简单解释一下BepInEx 版本这是目前最主流的安装包需要配合 BepInEx 框架使用。BepInEx 是游戏 Mod 圈通用的插件加载器很多 Unity 游戏打 Mod 都会用到。我推荐用这个因为后续装别的功能插件也方便。MelonLoader 版本另一个 Mod 加载器主要用于部分特定游戏社区普通用户可以不碰。下载前最好先看一眼 Release 发布说明里写了什么通常会有框架兼容性提示。版本号不重要适合自己的游戏环境就行最新稳定版优先。2.2 前置环境.NET Framework 版本自查XUnity.AutoTranslator 的插件本体是用 C# 写的加载进游戏后需要调用 .NET 的运行时环境。绝大多数 Windows 版的 Unity 游戏是自带了 Mono 运行时但插件本身还依赖系统的 .NET Framework 基础库。如果电脑上没装对应版本插件会静默失败——游戏正常打开但翻译完全不生效而且不报错非常容易误判成“文件放错位置”。建议安装前先去“控制面板 - 程序 - 启用或关闭 Windows 功能”里确认 .NET Framework 3.5 和 4.8 的状态。Windows 10/11 系统一般默认开启 4.8但 3.5 经常是关闭的。老游戏如果走的 net35 版本的插件缺了 3.5 必然加载不了。这一步没什么技术含量但确确实实是我踩过的坑——头一次试的时候插件死活不加载排查了半天最后发现是系统精简版把 3.5 干掉了。2.3 判断游戏类型Mono 还是 IL2CPP这是安装之前最需要花一分钟确认的事情因为直接决定你到底能不能用。Unity 游戏打包时有两种主流的后端方式Mono 构建游戏文件夹里能看到MonoBleedingEdge目录插件可以直接在运行时注入。所有功能都能用是 XUnity.AutoTranslator 的“主场”。IL2CPP 构建游戏脚本会被预先转换成 C 再编译传统的直接注入方式失效。这类游戏需要走 BepInEx 的 IL2CPP 版本而且翻译插件的兼容性要具体问题具体分析不一定都能支持。判断方法很简单打开游戏根目录看一眼里面有个叫MonoBleedingEdge的文件夹就是 Mono 构建看到GameAssembly.dll这种文件但没有 MonoBleedingEdge基本就是 IL2CPP。日系同人游戏和大多数小成本独立游戏都是 Mono所以这个工具才能这么流行大厂 3D 游戏则很多是 IL2CPP用的时候要降低期待。注意即使是 IL2CPP 游戏如果官方或社区已经发布了对应的 BepInEx IL2CPP 版本依然有尝试空间但别指望开箱即用。我实际测过几款有成功的也有完全无效的命中率五五开。3. 安装实操两种部署方式一次走通3.1 方式一BepInEx 插件式安装推荐这是目前社区最推荐的安装方式优点是好管理、易卸载、便于和别的 Mod 共存。先说步骤再说每一步为什么要这么做。第一步到 BepInEx 的 GitHub Releases 页面下载与游戏位数匹配的版本。怎么判断位数打开游戏根目录找到游戏主程序 exe右键属性在“兼容性”或“详细信息”里能看到目标平台或者直接看游戏目录里有没有x64文件夹。拿不准的话BepInEx 提供了 x64 和 x86 两个版本装错了插件加载器会报错到时候能很快发现。第二步把解压出来的 BepInEx 文件夹连同doorstop_config.ini、winhttp.dll等文件一起复制到游戏根目录。这一步的本质是让游戏启动时自动加载 BepInEx——winhttp.dll是 Windows 的“代理 DLL”机制游戏启动时会加载它然后它再把 BepInEx 引导起来。这也是为什么不要随意改这些文件名。第三步先裸跑一次游戏。重点来了第一次运行BepInEx 会在游戏目录下自动创建BepInEx/plugins和BepInEx/config等文件夹同时生成一堆日志文件。跑一次之后退出游戏去看看BepInEx目录是不是已经生成好了。如果生成正常说明加载器没被系统拦截工作正常。第四步把从 XUnity.AutoTranslator 下载的安装包解压找到XUnity.AutoTranslator.Plugin.BepInEx.dll文件名里带 BepInEx 的那个放进上一步自动生成的BepInEx/plugins文件夹里。重新启动游戏。第五步游戏标题界面或主菜单出现后在屏幕上确认是否有翻译插件的提示信息。具体表现因游戏而异有的会在左上角打印一段文字有的会在对话框文本上出现短暂的“预翻译”延迟。更可靠的方法是运行几分钟后退出游戏打开BepInEx/LogOutput.log看到XUnity.AutoTranslator相关的字样就说明插件已经被加载器挂载上了。3.2 方式二winhttp.dll 直接注入轻量方案如果你不想为了一个翻译功能专门装 BepInEx或者游戏本身对 Mod 加载器兼容性不好可以用最早的“站内注入”方式。这个方案的原理是直接把 XUnity.AutoTranslator 自己伪装成winhttp.dll放进游戏根目录让游戏启动时主动加载它绕开加载器这一层。使用流程更短把下载的zip解压将winhttp.dll、XUnity.AutoTranslator.Plugin.dll以及XUnity.AutoTranslator文件夹全部复制到游戏主程序的同级目录。这里特别注意路径不能错。winhttp.dll必须和游戏 exe 放在同一个文件夹里否则游戏加载不到。这种方式的优点是配置最少、启动最快适合只想“装完就跑”的玩家缺点也很明显升级麻烦、多个工具同时注入时容易冲突而且如果游戏本身已经有另一个 Mod 在使用winhttp.dll注入两者会打架。我个人的看法是新手直接选第一种 BepInEx 方式省心得多。3.3 第一次运行确认插件正常加载不管你选了哪种方式第一次进游戏都别急着开新档先做两件事。第一到标题界面等个 10 到 20 秒再开新游戏或者读取存档。这是因为插件首次加载时会扫描游戏的程序集建立文本钩子需要一点时间。如果一进去就火急火燎地看对话容易以为没生效。第二在游戏里触发一小段对话留意第一次弹出的文本会不会有“略慢”的情况。正常状态下首次出现的新句子会有轻微的延迟——这是翻译请求发出去了等结果回来再替换。如果等了五六秒还没变化大概率是翻译端点配置有问题这个问题在下一部分专门讨论。4. 配置翻译服务从“方块字”到“看得懂”4.1 配置文件生成位置与拆解插件加载成功之后第一次运行会自动生成AutoTranslatorConfig.ini配置文件。BepInEx 方式下它会出现在BepInEx/config/AutoTranslatorConfig.ini直接注入方式下会出现在游戏根目录。用记事本打开你会发现里面分成了几个段落核心的几个配置项长这样[General] Languagezh-CN FallbackLanguageen LegacyFallbackLanguage [Service] EndpointGoogleTranslateV2 FallbackEndpoint ApiKeyLanguage就是你想翻译到的目标语言中文填zh-CN简体中文是哪一种写法直接看 Unity 的 Locale 代码表即可。FallbackLanguage是回退语言意思是当源文本已经不是游戏的主要语言时插件如何处理。这个参数我后面会解释新手不建议动。Endpoint是翻译服务端点这一项是整份配置的核心。它决定了你的翻译请求发给谁也直接决定翻译质量、速度和要不要花钱。我整理了一份当前主流端点的选择对照表照着选就行。4.2 翻译端点选型免费方案与云端密钥这是整个配置里最容易把人绕晕的部分。选项实在太多了GoogleTranslateV1、V2、LiteV1、LiteV2BaiduDeepL……新手看着就头大。我从实际使用角度直接把结论给出来端点名称是否需要密钥速度/稳定性体感适合场景GoogleTranslateV2需要免费 API Key稳定偶尔超时追求沾语质量的默认选择GoogleTranslateLiteV2需要免费 API Key响应极快文本限制更严大量短文本对话BaiduTranslate需要免费 Key国内网络环境响应快网不好的时候首选TencentTranslate需要免费 Key国内网络环境响应快同样适合国内网络环境DeepLTranslate需要付费/试用 Key质量最高速度一般文本量大且对语义质量要求高对于零基础用户我的建议是如果只是想让游戏“大概能看懂”先去百度翻译开放平台注册一个个人开发者账号创建应用拿到密钥APP ID 和密钥填到对应位置。注册流程完全免费个人开发者有免费调用额度对单机游戏来说根本用不完。如果愿意多花五分钟注册 Google CloudGoogleTranslateV2 的日常翻译质量通常更符合中文语感。具体流程是在 Google Cloud 控制台启用 Cloud Translation API创建服务账号并生成 JSON 密钥文件然后在插件配置里把ApiKey填成文件内容里的private_key字段V2 端点需要这个。个人建议从百度或腾讯开始配置简单密钥是明文的一段字符串填进去就能跑。等玩明白了再根据需要切到 DeepL 这类高质量端点上。别一上来就追求最好的先用最简单的把流程跑通。4.3 频率限制与文本参数调优翻译请求本质上就是 HTTP 请求插件每次调用都有固定开销。如果你在游戏里连续快速阅读大量文本插件会在后台疯狂排队请求容易出现两类问题第一免费端点限流返回 429翻译直接失败第二请求积压导致“首翻延迟”明显变长。配置文件里有几个参数能缓解这些状况MaxCharactersPerTranslation单次翻译的最大字符数。默认值通常够用但如果某一句话特别长超出的部分会被截断导致翻译栏显示不全。可以适当调大但调太大会增大单次请求失败的概率。DelayBetweenTranslations两次翻译请求之间的最小间隔单位毫秒。默认几百毫秒如果在游戏开头集中出现大量新文本时频繁触发限流把这个值调大比如改成 1000。代价是连续出现的对话首翻会显得慢。MaxConcurrentTranslations同时发起的请求数量。默认值已经在“速度”和“限流”之间做了平衡除非你非常确定端点限额够大否则不要乱调。这几个参数没有绝对的最优值全看游戏文本密度和你用的端点限额。我自己的习惯是拿到新游戏先默认跑出现明显限流再逐步调。5. 常见问题与排查技巧实录5.1 插件没加载游戏还是原样这是评论区问得最多的一类全按步骤装了进游戏完全没有翻译连配置文件都没生成。如果遇到这种情况按以下几个方向排查基本能定位问题。先看日志。BepInEx 方式下BepInEx/LogOutput.log文件就是插件加载器的“黑匣子”打开看有没有红色报错。常见的一个坑是杀毒软件把winhttp.dll或BepInEx目录当作威胁隔离了。国产杀毒和 Windows Defender 都有概率误报因为“修改游戏启动流程”在特征上确实像恶意软件。排除方法很简单在杀毒软件的信任区里加上游戏目录然后重新解压一份文件。这个问题我遇到不止一次每次都是默认杀毒在悄咪咪动手。另一个高频原因是前置框架缺失。我前面说过net35 版本的插件必须要有 .NET Framework 3.5net47 版本基本上系统自带。装好重启再跑一次多半能解决。还有一种情况是游戏有原生反作弊或者特殊的文件校验比如部分网游、带 DRM 的单机游戏。这类游戏会拒绝加载任何非官方 DLL插件就算文件放对了也启动不了。别硬磕换 OCR 方案或者搜索游戏专属的翻译 Mod 更实际。5.2 翻译超时、报错、部分文本没翻插件加载成功但翻译出来是空白或者长时间停留在原文状态问题出在“翻译请求没成功返回”。先确认ApiKey填没填对、密钥是不是复制多了空格。再确认端点名称拼写尤其注意大小写配置文件是区分大小写的。如果确认了配置没问题再检查LogOutput.log里的 HTTP 状态码。429 是请求太多被限流503/403 是服务端拒绝需要检查密钥权限或服务是否开通。免费密钥经常遇到的是“未开通对应服务”这时候去云端控制台确认一下 Translate API 的启用状态而不是在游戏目录里瞎试。“部分文本没翻”则是另一个原理游戏里有一部分文本不是通过 Unity 常规文本组件渲染的比如图片上的文字、自定义字体渲染插件、UI 特效文本。XUnity.AutoTranslator 对这些“顽固派”无能为力。好在插件支持一种土办法把截图或解包出来的图片文字手工整理到AutoTranslator/Translation/zh-CN目录下的文本文件里按照固定格式提供“原文-译文对照”插件会在运行时全局替换。相当于给那些翻不到的地方强制配置了离线字典。格式很简单本质就是一行一句的对应关系具体格式去项目 Wiki 查一下即可。5.3 离线词典与人工校正的使用诀窍翻译质量一直是这个工具被吐槽的重灾区。机翻出来的文本遇到专有名词、人名、梗经常翻得莫名其妙。你想让它更准确最简单有效的手段就是不断喂词典。插件运行中产生的所有翻译结果都会自动缓存到AutoTranslator/Translation/zh-CN目录下的文本文件里。你可以直接打开这些缓存文件手动修改译文改完之后删除对应的 line 缓存重新触发或者直接重启游戏让它重新读取。这个机制特别像“汉化修正补丁”的实时版本你每校正一处整个游戏里所有出现同一句话的地方都会跟着变。我自己的做法是先跑完一个章节然后集中时间看一遍缓存文件把关键角色的名字、地名统一修正一遍。这样几轮下来游戏体验会非常接近正式汉化——而且完全不用等汉化组。5.4 常见问题速查表现象最大概率原因快速处理进游戏没任何反应无配置文件生成文件放错目录 / 杀毒拦了 winhttp.dll核对目录加信任区并重新解压BepInEx 窗口一闪而过缺 .NET Framework 3.5控制面板开启对应功能文本是原文但配置文件已生成端点密钥错误或服务未启用检查 ApiKey、端点名称大量文本一直转圈不翻译限流或当时网络环境不佳调大 DelayBetweenTranslations或换端点翻译出来是黑色方块/问号字体文件缺失字体去项目 Wiki 找字体替换方案只有一部分文本翻译了图片文本/特殊渲染无法捕获手动维护离线译文文件最后再分享一个我实际用下来非常值的小技巧如果你要玩的是那种文本量特别大的 JRPG第一次进入游戏后不要急着直接开推先找个存档点挂机 10 分钟让插件把游戏开场阶段的高频对话自动预热一遍。虽然前期会有点慢但等你真正开始玩的时候缓存已经积累了不少常用句阅读体验会流畅很多。配合手动校正文本这套方案玩冷门游戏真的比干等汉化补丁靠谱太多了。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门