Unity游戏实时汉化实战:XUnity.AutoTranslator从安装到优化全指南
1. 项目概述:为什么你需要XUnity.AutoTranslator?
如果你是一个喜欢玩独立游戏或者某些特定类型Unity游戏的玩家,肯定遇到过这种情况:一款游戏玩法、美术都深得你心,但偏偏没有官方中文,满屏的英文、日文或者其他语言让你玩起来磕磕绊绊,查词典查得头大。找汉化补丁吧,要么版本对不上,要么汉化质量参差不齐,甚至可能夹带私货。这时候,一个能实时、自动翻译游戏内文本的工具,就成了刚需。
XUnity.AutoTranslator(下文简称XUA)就是为解决这个问题而生的神器。它不是一个简单的“翻译器”,而是一个功能极其强大的Unity游戏文本钩取与替换插件。简单来说,它能在游戏运行时,“监听”到游戏UI上显示的任何文本,然后调用你指定的翻译服务(比如谷歌翻译、百度翻译、DeepL等),将翻译结果实时替换上去,让你几乎“无缝”地玩上中文版游戏。更厉害的是,它支持手动修正翻译、自定义字体、甚至替换游戏内的图片(比如带文字的UI图),功能深度远超一个普通翻译插件。
我接触这个插件已经好几年了,从它早期版本用到现在,处理过各种稀奇古怪的Unity游戏,从视觉小说到RPG,从2D像素风到3D大作。可以说,只要游戏是基于Unity引擎开发的,XUA就有很大概率能搞定它的文本翻译。今天这篇指南,我就把我这些年积累的经验,浓缩成最核心的3个步骤,带你从零开始,让任何Unity游戏“秒变”中文版。无论你是纯新手,还是有一定Mod安装经验的玩家,跟着做,都能成功。
2. 核心思路与准备工作:理解XUA的工作原理
在动手之前,我们先花几分钟搞清楚XUA到底是怎么工作的。这能帮你理解后续每一步操作的意义,遇到问题时也知道该往哪个方向排查。
2.1 XUA的三大核心模块
XUA本质上是一个运行在游戏进程内的“中间人”。它通过BepInEx、IPA或ReiPatcher等Unity Mod框架注入到游戏中,然后主要干三件事:
- 文本钩取与拦截:这是核心。XUA会“钩住”(Hook)Unity引擎中用于显示文本的函数(比如
TextMeshPro、UGUI Text、NGUI Label等组件的文本设置方法)。当游戏调用这些函数显示文字时,XUA会先一步拿到原始的、未翻译的文本字符串。 - 翻译与替换:拿到原始文本后,XUA会先在本地翻译缓存文件(
_AutoGeneratedTranslations.txt)里查找是否已经有手动添加或之前自动翻译好的对应译文。如果没有,它就会根据你的配置,调用在线的翻译API(如Google Translate)进行实时翻译,并将结果缓存下来。最后,它把翻译好的文本“塞回”给游戏引擎,替换掉原本要显示的内容。 - 资源重定向:这是高级功能。除了文本,XUA还能通过其附带的
XUnity.ResourceRedirector库,拦截游戏加载图片、音频等资源文件的请求。这意味着你可以把游戏里带外文的UI图片、图标等资源文件替换成自己准备好的中文版本,实现真正完整的“汉化”。
2.2 你需要准备什么?
开始三步走之前,请确保你手头有这几样东西:
- 目标游戏:一个你想汉化的、基于Unity引擎的PC游戏。通常你可以在游戏根目录下看到
UnityPlayer.dll、GameAssembly.dll(IL2CPP编译)或Mono相关DLL文件。 - Mod加载器:绝大多数情况下,我们使用BepInEx。它是一个通用、稳定且社区支持最广的Unity游戏Mod框架。你需要下载与游戏架构(x86或x64)匹配的BepInEx版本。对于现代游戏,通常选择BepInEx 5.x或6.x的x64版本。
- XUnity.AutoTranslator插件包:去GitHub的
bbepis/XUnity.AutoTranslator项目页面,下载最新的XUnity.AutoTranslator-BepInEx-{VERSION}.zip文件。注意:一定要下载带BepInEx字样的版本,这是为BepInEx框架预配置好的。 - 一个可用的翻译API(可选但强烈推荐):虽然XUA内置了免费的谷歌翻译端点,但由于网络限制,在国内直接使用可能不稳定或无法连接。我强烈建议你准备一个备用方案:
- 百度翻译API:免费申请,有每月一定额度的免费字符数,对于个人游戏翻译完全够用。你需要申请
App ID和密钥。 - 彩云小译API:同样有免费额度,翻译质量不错。
- 自建代理:如果你有技术能力,可以为谷歌翻译配置代理服务地址。
- 百度翻译API:免费申请,有每月一定额度的免费字符数,对于个人游戏翻译完全够用。你需要申请
实操心得:对于新手,我首推百度翻译API。申请过程简单,国内访问速度快且稳定。虽然翻译某些游戏术语(尤其是奇幻、科幻类)可能不如DeepL精准,但结合XUA的本地缓存和手动修正功能,完全能获得优秀的体验。千万不要在公开分享的汉化补丁里配置你自己的付费API密钥!
3. 第一步:基础环境搭建与插件安装
这是最基础,也最关键的一步。如果这一步出错,后面所有工作都无法进行。
3.1 安装BepInEx Mod加载器
- 解压BepInEx:将下载的BepInEx压缩包(例如
BepInEx_x64_5.4.23.0.zip)解压。 - 放置文件:将解压后得到的所有文件和文件夹(主要是
winhttp.dll、doorstop_config.ini、BepInEx文件夹等)直接复制到你的游戏根目录。游戏根目录就是包含游戏主程序(.exe文件)的那个文件夹。 - 首次运行:双击运行游戏主程序(
.exe)。游戏可能会黑屏或卡顿一会儿,这是BepInEx在初始化。运行一次后,正常关闭游戏。 - 验证安装:回到游戏根目录,你应该能看到新生成了一个
BepInEx文件夹,并且里面有了plugins、config等子文件夹。同时,根目录下会多出一个LogOutput.log文件(BepInEx的日志)。这说明BepInEx安装成功。
注意事项:有些游戏有反作弊或特殊的启动器,可能会干扰BepInEx。如果游戏无法启动或启动后没有生成
BepInEx文件夹,你需要查阅该游戏特定的Mod安装教程,可能需要使用特殊的启动参数或兼容层。
3.2 安装XUnity.AutoTranslator插件
- 解压XUA:解压你下载的
XUnity.AutoTranslator-BepInEx-{VERSION}.zip文件。 - 放置核心文件:将解压得到的
plugins文件夹下的XUnity.AutoTranslator文件夹,整个复制到游戏目录的BepInEx\plugins\路径下。- 最终路径应该类似于:
你的游戏目录\BepInEx\plugins\XUnity.AutoTranslator\。
- 最终路径应该类似于:
- 放置依赖库:检查XUA压缩包内是否有
core、patchers等文件夹,按照压缩包内的结构,将它们复制到游戏目录的BepInEx文件夹下,与现有的plugins、config文件夹同级。通常BepInEx版本的XUA包已经包含了所有必要依赖,直接整体覆盖即可。 - 首次运行生成配置:再次启动游戏。等待游戏进入主菜单或可以看见文字的地方,然后正常关闭游戏。这一步是为了让XUA生成默认的配置文件。
3.3 验证插件是否生效
- 打开游戏目录下的
BepInEx\plugins\XUnity.AutoTranslator文件夹。 - 你应该能看到一个名为
Translation的文件夹,以及一个Config.ini文件。Translation文件夹里会根据你的游戏语言设置生成子文件夹(如zh-CN)。 - 打开
BepInEx\LogOutput.log文件,搜索XUnity.AutoTranslator。如果能看到类似[Info :XUnity.AutoTranslator] Initializing XUnity.AutoTranslator...和[Info :XUnity.AutoTranslator] Plugin initialization complete!的日志,说明插件加载成功。
如果到这里一切顺利,恭喜你,XUA已经成功“住”进了你的游戏里。但它现在还是个“哑巴”,因为我们还没告诉它怎么翻译、翻译成什么语言。
4. 第二步:核心配置与翻译引擎设置
现在我们来“激活”XUA,让它开始为我们工作。所有配置都在Config.ini文件中完成。用记事本或其他文本编辑器(推荐VSCode、Notepad++)打开它。
4.1 基础语言与翻译端点配置
找到[General]部分,这是最重要的配置区。
[General] Language=zh-CN SourceLanguage=ja ;SourceLanguage=en ;SourceLanguage=ko Endpoint=GoogleTranslate ;Endpoint=BaiduTranslate ;Endpoint=Language: 这是目标语言,即你想把游戏翻译成什么语言。设置为zh-CN(简体中文)。如果你想翻译成繁体中文,则用zh-TW。SourceLanguage: 这是源语言,即游戏原本使用的语言。你需要根据游戏实际情况设置。常见的有:ja- 日语en- 英语ko- 韩语- 如果游戏是英文,但你想用日文作为中转翻译成中文(有时对ACG术语更友好),可以设置
SourceLanguage=ja,但需要确保你的翻译端点支持日转中。 - 用
;注释掉不用的行。确保只有你需要的源语言那一行没有;。
Endpoint:翻译服务提供商,这是核心。默认是GoogleTranslate(谷歌翻译)。如果你在国内无法使用,就需要更改。- 如果你想使用百度翻译,将其改为
Endpoint=BaiduTranslate,并取消注释下面[Baidu]部分的配置。 - 如果你想完全禁用自动翻译(仅使用手动翻译的缓存文件),将其设为空:
Endpoint=。
- 如果你想使用百度翻译,将其改为
4.2 配置百度翻译API(国内用户首选)
如果你选择了BaiduTranslate,需要配置API信息。
- 申请API:前往百度翻译开放平台官网,注册开发者账号,创建一个“通用翻译API”应用。成功后,你会获得
App ID和密钥。 - 填写配置:在
Config.ini中找到[Baidu]部分:
[Baidu] BaiduAppId=你的百度翻译App ID BaiduAppSecret=你的百度翻译密钥将你的百度翻译App ID和你的百度翻译密钥替换成你申请到的实际内容。务必保管好你的密钥,不要泄露或在公开补丁中分享。
4.3 其他关键配置项解析
[Behaviour]部分:EnableTranslationAggregator=True:启用翻译聚合器窗口(按Alt+0呼出),可以同时显示多个翻译引擎的结果,方便对比选择。建议开启。MaxCharactersPerTranslation=400:单次翻译的最大字符数。超过此长度的文本(如大段剧情)会被跳过。重要:如果你要打包分享汉化补丁,请务必确保此值不超过400,并尽可能填充本地翻译文件,以减少对在线API的调用。OutputUntranslatableText=False:是否输出无法翻译的文本到日志。调试时可开,正常使用建议关闭,否则日志文件会暴涨。
[Texture]部分(图片翻译):EnableTextureTranslation=False:默认关闭。如果你需要替换游戏内的图片(如带文字的按钮、菜单图),可以设置为True,并配合TextureDirectory路径放置替换后的图片。EnableTextureDumping=False:切勿在公开发布的补丁中开启此选项!它会将游戏内所有检测到的纹理图片导出,可能导致性能问题并产生巨大文件。
4.4 字体配置(解决中文显示方块问题)
很多游戏的默认字体不包含中文字符集,导致翻译出来的中文显示为“□□□”。XUA提供了字体覆盖功能。
- 获取中文字体文件:你需要一个包含中文的
.ttf或.otf字体文件,例如“思源黑体”、“方正准圆”等。注意版权,确保用于个人用途。 - 对于UGUI(旧版Unity UI): 在
[Behaviour]部分设置:
例如,如果你将OverrideFont=字体文件路径SourceHanSansCN-Normal.ttf字体文件放在游戏根目录,可以写OverrideFont=SourceHanSansCN-Normal.ttf。更可靠的方式是将字体制作成Unity AssetBundle,但这需要一定的Unity编辑器操作,对新手较复杂。 - 对于TextMeshPro(TMP,新版Unity UI): 这是更常见的情况。XUA支持为TMP添加后备字体。
例如,可以使用TMP自带的FallbackFontTextMeshPro=字体资源名Fonts & Materials/LiberationSans SDF作为后备(如果它包含中文)。更佳做法是使用社区制作好的TMP字体AssetBundle。你可以在XUA的GitHub Release页面找到TMP_Font_AssetBundles.zip,解压后将其中的.assets文件放入游戏目录,并在此处配置文件名(不含扩展名)。
配置完成后,保存Config.ini文件。再次启动游戏,如果一切配置正确,你应该能看到游戏内的文本开始被自动翻译成中文了!首次运行会边玩边生成翻译缓存,后续再玩时,已翻译过的文本会直接从本地缓存读取,速度飞快。
5. 第三步:高级调校与手动优化
自动翻译只是第一步,机器翻译的生硬、错误在所难免。第三步就是让你从“能玩”升级到“玩得舒服”的关键。
5.1 使用翻译聚合器进行实时校对
在游戏中按Alt+0可以呼出翻译聚合器窗口。这个窗口会显示当前鼠标悬停或选中的文本,并同时调用你配置的多个翻译引擎(需要在[TranslationAggregator]中启用)进行翻译对比。
如何使用:
- 遇到翻译生硬或错误的地方,将鼠标悬停在那个文本上(或按
Alt+C复制文本到剪贴板)。 - 查看聚合器窗口中各个引擎的翻译结果。
- 选择一个你认为最准确的翻译,或者综合几个翻译自己组织一句更通顺的。
- 按
Alt+R可以强制重新加载翻译文件,让你修改后立即生效。
5.2 编辑本地翻译文件,实现精准汉化
所有自动翻译和手动添加的翻译,最终都保存在Translation\zh-CN\Text\_AutoGeneratedTranslations.txt文件中。这个文件是纯文本格式,每一行就是一个翻译对:
原文=译文手动优化流程:
- 玩游戏,遇到翻译不对劲的地方。
- 切出游戏,打开
_AutoGeneratedTranslations.txt文件。 - 使用文本编辑器的搜索功能(Ctrl+F),查找那段有问题的原文。
- 将等号右边的自动翻译结果,修改为你认为更准确、更符合语境、更“信达雅”的译文。
- 保存文件。
- 回到游戏,按
Alt+R热键重载翻译。刚才修改的文本就会立即更新为你手动翻译的内容。
高级技巧——使用正则表达式: 对于有规律变化的文本,比如道具名“生命药水 I”、“生命药水 II”,可以用正则表达式批量处理:
r:"^生命药水 ([IVXLCDM]+)$"=Health Potion $1这行配置会将所有罗马数字等级的生命药水都统一翻译。正则表达式功能强大但需谨慎使用,不当使用可能导致性能问题或翻译错乱。
5.3 处理特殊场景与疑难杂症
- 翻译不生效或部分文本不翻译:
- 检查
Config.ini中的SourceLanguage是否设置正确。 - 检查游戏文本是否是图片形式(而非文字)。如果是图片,需要开启
EnableTextureTranslation并制作替换图。 - 某些游戏使用自定义的文本渲染方式,可能需要调整
TextGetterCompatibilityMode=True试试。 - 按
Alt+T可以临时开关翻译,检查是否是翻译导致了显示问题。
- 检查
- 游戏崩溃或闪退:
- 首先检查BepInEx的日志文件
LogOutput.log,看是否有红色错误信息。 - 尝试在
Config.ini中设置[Behaviour]下的EnableSilentMode=True,减少插件输出。 - 如果是IL2CPP编译的游戏(有
GameAssembly.dll),XUA的支持可能不完整,可以尝试使用AutoTranslator.IL2CPP.BruteForceFix这个辅助插件。
- 首先检查BepInEx的日志文件
- 翻译后文字显示不全或重叠:
- 开启UI自动重设大小功能:
[Behaviour]下设置EnableUIResizing=True。 - 如果还不行,可以手动创建
resizer.txt文件来调整特定UI元素的字体大小和布局。这需要借助Runtime Unity Editor等工具来获取UI元素的路径。
- 开启UI自动重设大小功能:
- 为其他Mod提供翻译:
- 如果游戏有其他Mod,它们的UI可能也需要翻译。你可以在
Translation\zh-CN\Text\目录下创建Plugins文件夹,再在里面为每个Mod的DLL创建同名文件夹,放入翻译文件即可。
- 如果游戏有其他Mod,它们的UI可能也需要翻译。你可以在
6. 常见问题排查与实战技巧实录
这里记录了我踩过的一些坑和对应的解决方案,希望能帮你节省大量折腾的时间。
6.1 问题速查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
游戏启动后无任何翻译效果,Translation文件夹为空 | 1. BepInEx未正确安装。 2. XUA插件文件放置位置错误。 3. 游戏是IL2CPP版本且未使用BruteForceFix。 | 1. 检查BepInEx\LogOutput.log,确认XUA插件已加载。2. 确保文件路径为 BepInEx\plugins\XUnity.AutoTranslator。3. 对于IL2CPP游戏,尝试使用辅助插件。 |
| 翻译结果为英文或非目标语言 | Config.ini中的Language设置错误。 | 检查并确保Language=zh-CN(或其他目标语言代码)。 |
| 翻译API频繁报错或翻译慢 | 1. 网络连接问题。 2. 免费API额度用尽或频率限制。 3. 使用了不稳定的公共端点。 | 1. 检查网络,尝试切换翻译端点(如从GoogleTranslate换到BaiduTranslate)。 2. 申请自己的API密钥并配置。 3. 在 [Http]部分尝试配置ServiceUrl使用可访问的代理(仅限有相关资源和技术能力的用户)。 |
| 中文显示为方块“□□□” | 游戏字体不支持中文。 | 配置FallbackFontTextMeshPro或OverrideFont,使用包含中文字符的字体。 |
按Alt+0无反应,翻译聚合器不显示 | 翻译聚合器未启用或热键冲突。 | 检查Config.ini中[Behaviour]下的EnableTranslationAggregator是否为True。尝试更改游戏内热键或XUA的热键配置(需修改代码,较复杂)。 |
修改_AutoGeneratedTranslations.txt后按Alt+R不生效 | 1. 文件编码不是UTF-8 without BOM。 2. 文件正在被其他程序占用。 3. 修改了错误的文件(检查语言目录是否正确)。 | 1. 用Notepad++等编辑器将文件转为“UTF-8 无BOM”编码格式保存。 2. 关闭可能占用文件的编辑器。 3. 确认路径是 Translation\{Lang}\Text\_AutoGeneratedTranslations.txt。 |
| 游戏特定场景或Mod的UI不翻译 | 1. 该UI使用IMGUI绘制且默认被禁用。 2. 文本路径特殊,未被钩取。 | 1. 尝试在Config.ini中设置[Behaviour]下的EnableIMGUI=True(可能影响性能)。2. 开启 EnableTextPathLogging=True,在日志中查看文本路径,尝试手动添加翻译或调整钩取策略。 |
6.2 独家避坑技巧
- 翻译缓存是王道:第一次玩一个新游戏,耐心点,让它跑一遍自动翻译。之后将生成的
_AutoGeneratedTranslations.txt文件备份。重装游戏或分享给朋友时,直接放入这个文件,就能获得一个“基础汉化版”,体验大幅提升。 - 分而治之管理翻译:不要把所有手动翻译都堆在
_AutoGeneratedTranslations.txt里。可以按章节、系统或Mod创建新的.txt文件放在Translation\zh-CN\Text\目录下。XUA会读取所有.txt文件,并且_AutoGeneratedTranslations.txt优先级最低,方便你管理和覆盖。 - 活用“替换”功能:在
Translation\zh-CN\Text\目录下可以创建_Substitutions.txt文件。这里定义的替换规则会在翻译之前生效。比如游戏里角色名“John”总被翻译成“约翰”,但你希望保留原文,就可以添加John=John。这样翻译引擎就不会处理它了。 - 性能与稳定性权衡:如果你感觉游戏变卡了,尤其是场景切换时,可以尝试关闭一些高级功能:
EnableTextureScanOnSceneLoad=False,EnableSpriteRendererHooking=False,CacheTexturesInMemory=False(如果用了图片翻译)。这些功能会消耗更多资源。 - 制作可分享的汉化补丁:如果你想把自己的劳动成果打包分享,请务必:
- 清理
_AutoGeneratedTranslations.txt,删除所有未修改的、质量差的机器翻译行,只保留你精心校对过的内容。 - 将
Config.ini中的Endpoint设为空(Endpoint=),强制用户使用本地翻译文件,避免他们因API问题无法使用。 - 将
MaxCharactersPerTranslation设置为400或更低。 - 绝对不要包含
EnableTextureDumping=True、EnableTextureToggling=True、OutputUntranslatableText=True等会产生大量文件或日志的配置。 - 提供一个清晰的
Readme.txt,说明安装步骤和配置方法。
- 清理
经过以上三步——安装、配置、优化——你基本上就能征服绝大多数Unity游戏的汉化了。XUnity.AutoTranslator的强大之处在于它的高度可定制性和自动化潜力。一开始你可能只是用它来解燃眉之急,但随着你深入使用,手动修正越来越多的文本,最终甚至能产出一份质量不亚于专业汉化组的补丁。这个过程本身,也是深入了解游戏结构和语言之美的有趣经历。