
1. 项目概述为什么你需要 XUnity.AutoTranslator如果你是一个喜欢玩各种独立游戏、视觉小说或者日系RPG的玩家肯定遇到过这样的烦恼一款游戏非常对胃口但偏偏没有中文甚至没有英文只有日文或者其他小语种。硬啃生肉吧体验大打折扣等汉化组吧遥遥无期。又或者你是一个游戏开发者想要快速为自己的游戏添加多语言支持但手动替换文本的工作量巨大且难以维护。这时候一个能实时、自动翻译游戏内文本的工具就成了刚需。XUnity.AutoTranslator下文简称XUA就是为解决这个痛点而生的神器。它不是一个简单的屏幕OCR翻译工具而是一个深度集成到Unity游戏引擎内部的翻译插件。简单来说它能在游戏运行时“截获”游戏引擎准备显示在屏幕上的每一段文本将其发送到你指定的翻译服务如谷歌翻译、百度翻译、DeepL等然后将翻译结果“塞回”游戏UI中显示出来。整个过程几乎是实时的你看到的就是翻译后的文本。我最初接触它是因为一款非常小众的日式RPG苦等半年没有汉化最终决定自己动手。在尝试了各种外挂式翻译工具后要么延迟高要么识别率差要么破坏游戏体验。直到发现了XUA安装配置后游戏内的对话、菜单、物品描述瞬间变成了可读的中文那种畅快感无以言表。更重要的是它不仅仅是“能用”通过合理的配置其翻译的准确性、UI适配度、性能开销都能达到一个非常理想的状态真正实现了“效率提升10倍”的体验——从完全看不懂到流畅游玩可能就只差这一个小插件的距离。2. 核心需求解析XUA 到底解决了什么问题在深入安装步骤之前我们必须先搞清楚XUA的核心价值这能帮助你在后续配置中做出更明智的选择。它的能力远不止“把日文翻成中文”这么简单。2.1 无缝的实时游戏内翻译这是XUA最基础也是最核心的功能。它通过Hook钩子技术直接介入Unity引擎的文本渲染流程。当游戏调用诸如TextMeshPro或UGUI Text组件的text属性设置文本时XUA会先一步拿到这个原始字符串。如果它在本地翻译缓存文件或在线翻译服务中找到了对应的翻译就会用翻译后的文本替换掉原始文本再交给游戏引擎去渲染。这个过程对游戏本身是透明的游戏甚至“不知道”自己显示的内容已经被替换了。这意味着零延迟翻译发生在文本被渲染之前没有OCR工具那种截图-识别-覆盖的延迟感。高精度直接获取引擎内部的字符串100%准确不存在OCR识别错误的问题。无干扰不会在游戏画面上叠加额外的翻译窗口保持了游戏画面的纯净。2.2 高度可定制化的翻译流程XUA不是一个黑盒。它提供了从翻译源、缓存、文本处理到UI适配的全链路配置。你可以选择翻译引擎支持谷歌、百度、DeepL、彩云小译等十余种在线服务也支持离线词典。管理翻译缓存所有翻译过的文本都会自动保存到本地的_AutoGeneratedTranslations.txt文件中。你可以直接编辑这个文件将机器翻译修正为更准确、更符合语境的翻译。下次启动游戏就会优先使用你修正后的版本无需再次请求在线翻译。处理复杂文本游戏文本常常包含富文本标签如颜色、大小标记colorred、变量占位符、或者因换行导致的空格问题。XUA内置了预处理和后处理机制可以剥离这些无关字符后再发送翻译确保翻译质量。适配UI显示翻译后的文本长度很可能与原文不同。XUA可以自动调整文本框的字体大小、换行模式甚至替换字体例如为中文替换一个支持更多字符的字体防止文字显示不全或出现“□□□”这样的乱码。2.3 超越文本资源重定向与纹理替换这是XUA的高级功能也是它区别于其他翻译工具的杀手锏。有些游戏的文字并非动态文本而是直接做在了图片UI里比如一些复古RPG的菜单图。XUA的Resource Redirector模块可以拦截游戏加载图片、音频等资源的请求并用你准备好的已翻译资源文件如图片替换掉原始文件。纹理翻译开启EnableTextureTranslation后XUA可以自动将游戏内的UI图片资源导出你使用PS等工具将图片上的文字P成中文后放回指定文件夹游戏运行时就会自动加载你的中文版图片。资源Mod支持这个模块本身是独立的意味着其他Mod开发者也可以利用它来替换游戏内的任何资源模型、声音等为游戏Mod开发提供了强大的底层支持。2.4 面向开发者和高级用户的扩展性XUA不仅仅是一个终端用户工具。它提供了完整的API允许其他插件查询其翻译结果。更重要的是它允许开发者为其编写新的翻译器插件实现ITranslateEndpoint接口以接入任何自定义的翻译API。如果你所在的环境无法直接访问某些翻译服务这个功能就变得极其有用。3. 安装前的准备工作选择你的“启动器”XUA本身是一个插件DLL文件它需要依赖一个“插件框架”才能被注入到Unity游戏中。这个框架负责在游戏启动时加载XUA。目前主流有三种选择你需要根据目标游戏已经使用的框架来决定。注意绝大多数使用Unity引擎且支持Mod的PC游戏都会选择BepInEx作为插件框架。因此BepInEx 5.x 是首选方案。在动手前最好去游戏社区或Mod站如Nexus Mods看看该游戏的Mod通常使用什么框架。3.1 方案一BepInEx最通用、最推荐适用场景绝大多数Unity游戏尤其是通过Steam等平台发布的独立游戏。原理BepInEx是一个通用的Unity游戏插件加载器。它会在游戏主程序启动前运行将自身和所有插件DLL注入到游戏进程中。安装包选择在XUA的GitHub Releases页面下载名为XUnity.AutoTranslator-BepInEx-{VERSION}.zip的文件。请确保版本号与你游戏的Unity引擎版本大致兼容通常选最新版即可。3.2 方案二IPAIllusion Plugin Architecture适用场景主要用于Illusion公司I社出品的游戏如《HoneySelect》、《AI少女》等。原理IPA是专门为I社游戏设计的插件框架其原理与BepInEx类似但更专精于该公司的游戏。安装包选择下载XUnity.AutoTranslator-IPA-{VERSION}.zip。3.3 方案三ReiPatcher适用场景一些较老的、使用Unity 4.x或5.x引擎的游戏或者某些特定社区沿用此框架的游戏。原理一个更早期的补丁式注入工具。安装包选择下载XUnity.AutoTranslator-ReiPatcher-{VERSION}.zip。如何判断游戏使用哪种框架查看游戏根目录打开游戏安装文件夹如果存在BepInEx文件夹则用方案一。如果存在Plugins文件夹且里面有IPA相关文件则用方案二。查阅社区在游戏的贴吧、论坛或Nexus Mods页面看其他Mod的安装说明要求使用什么框架。无框架如果游戏目录非常“干净”没有任何Mod框架那么你需要先为游戏安装BepInEx。通常BepInEx的安装方法是将下载的压缩包内容解压到游戏根目录即可但具体游戏可能有特定补丁需求需查阅BepInEx的Wiki。我的经验在我处理过的几十款游戏中90%以上使用BepInEx 5。如果实在无法确定先尝试安装BepInEx 5。如果游戏因此无法启动再尝试其他方案或寻找该游戏专用的BepInEx安装指南。4. 分步安装指南以 BepInEx 5 为例假设我们已经确定目标游戏使用BepInEx 5。以下步骤将带你完成从零到一的完整安装。4.1 第一步安装 BepInEx 5 框架定位游戏根目录在Steam库中右键游戏 - “管理” - “浏览本地文件”。这就是你的游戏根目录例如D:\Steam\steamapps\common\YourGame。下载BepInEx前往BepInEx的GitHub发布页下载对应你操作系统位数通常是x64的BepInEx_x64_VERSION.zip。解压安装将压缩包内的所有文件和文件夹主要是BepInEx文件夹、doorstop_config.ini、winhttp.dll等解压到游戏根目录。确保BepInEx文件夹与游戏主程序.exe文件在同一级目录。首次运行启动一次游戏。如果安装成功游戏启动后会在BepInEx文件夹下生成plugins、config等子目录。然后关闭游戏。4.2 第二步安装 XUnity.AutoTranslator 插件下载XUA从XUA的GitHub Releases页面下载XUnity.AutoTranslator-BepInEx-{VERSION}.zip。解压插件打开这个压缩包你会看到类似这样的结构BepInEx/ └── plugins/ └── XUnity.AutoTranslator/ ├── AutoTranslatorConfig.ini ├── XUnity.AutoTranslator.dll ├── XUnity.Common.dll ├── XUnity.ResourceRedirector.dll └── Translation/合并文件夹将压缩包内的BepInEx文件夹整体拖拽到你的游戏根目录。Windows会提示“合并”或“替换”选择“是”或“替换目标中的文件”。这一步确保了XUA插件被放到了正确的BepInEx/plugins/路径下。验证安装此时你的游戏目录结构应类似于YourGame.exe BepInEx/ ├── core/ ├── plugins/ │ ├── XUnity.AutoTranslator/ 这是我们的插件 │ │ ├── AutoTranslatorConfig.ini │ │ └── ... │ └── 其他插件可能在这里 └── config/4.3 第三步首次运行与基础配置启动游戏再次启动游戏。如果一切顺利游戏会正常加载。XUA在启动时会自动生成一些必要的文件夹和文件。呼出控制台可选但推荐在游戏中按下F1键BepInEx默认键位屏幕左上角会出现一个控制台窗口。如果能看到来自XUnity.AutoTranslator的加载日志恭喜你插件安装成功了找到配置文件关闭游戏。现在打开BepInEx/plugins/XUnity.AutoTranslator/AutoTranslatorConfig.ini这是XUA的核心配置文件。我们将进行最关键的基础设置。5. 核心配置详解让翻译引擎跑起来配置文件看起来复杂但我们需要关注的只有几个关键部分。用文本编辑器如Notepad、VSCode打开AutoTranslatorConfig.ini。5.1 设置翻译语言与引擎找到[General]部分[General] Languagezh-CN FromLanguageja EndpointGoogleTranslateLanguage目标语言即你想翻译成的语言。zh-CN是简体中文en是英文ja是日文。FromLanguage源语言即游戏文本的原始语言。大多数日系游戏是ja。如果不确定可以留空或设置为auto让翻译引擎自动检测但准确率可能稍低。Endpoint翻译服务提供商。这是最重要的设置之一。可选值包括GoogleTranslate: 谷歌翻译免费需网络条件。BaiduTranslate: 百度翻译免费需要申请App ID和密钥国内速度快。DeepLTranslate: DeepL翻译质量高免费版有限额。空着不填禁用在线翻译仅使用本地翻译文件。如何选择Endpoint网络无障碍首选GoogleTranslate综合表现最好。国内网络环境首选BaiduTranslate需要去百度翻译开放平台免费申请App ID和App Secret然后配置在配置文件后面的[Baidu]部分。追求最高质量选择DeepLTranslate并在[DeepL]部分配置API密钥付费。5.2 配置在线翻译服务以百度翻译为例如果你选择了BaiduTranslate需要继续配置。在配置文件中找到[Baidu]部分[Baidu] BaiduAppId你的百度翻译App ID BaiduAppSecret你的百度翻译App Secret访问百度翻译开放平台注册并登录。在“管理控制台”创建一个“通用翻译”应用。获取系统分配的App ID和密钥即App Secret。将这两个值分别填入配置文件的BaiduAppId和BaiduAppSecret中。我的踩坑经验百度翻译的App Secret一定要填对它是密钥不是密码。另外百度翻译免费版有QPS每秒请求数限制如果游戏文本弹出太快可能会遇到翻译失败。这时可以调整[Behaviour]部分的MaxCharactersPerTranslation默认1000调小或启用EnableBatchingTrue来合并请求。5.3 调整基础行为参数找到[Behaviour]部分这里控制着插件的核心逻辑[Behaviour] EnableTranslationScopingTrue EnableBatchingTrue MaxCharactersPerTranslation400 OutputUntranslatableTextFalseEnableTranslationScoping启用翻译作用域。如果你的游戏有多个可执行文件或大量场景开启它可以提升性能和避免翻译冲突。EnableBatching启用请求合并。将多个短文本合并成一个请求发送给翻译API能显著减少请求次数避免触发频率限制。强烈建议开启。MaxCharactersPerTranslation单次翻译的最大字符数。绝对不能超过1000且在分享你的翻译补丁时务必将其设置为400或更低这是为了遵守大多数翻译API的服务条款防止滥用。OutputUntranslatableText是否输出无法翻译的文本。调试时可以开启但发布时必须设为False否则会输出大量无意义的系统字符串。5.4 配置UI与字体解决中文显示问题这是让翻译结果“好看”的关键。找到[UI]部分[UI] EnableUIResizingTrue OverrideFontTextMeshProMicrosoft YaHei UI FallbackFontTextMeshProMicrosoft YaHei UIEnableUIResizing自动调整UI组件大小以适应翻译文本。务必开启否则长文本会显示不全。OverrideFontTextMeshPro强制替换所有TextMeshPro文本的字体。许多游戏自带的字体不包含完整的中文字符集会导致中文显示为方框。这里可以指定一个系统字体如Microsoft YaHei UI微软雅黑UI。你需要确保这个字体名称在你的系统上存在。FallbackFontTextMeshPro为TextMeshPro设置后备字体。当游戏字体无法显示某个字符时会尝试使用这个后备字体。通常和上面的字体设成一样即可。字体配置的坑字体名称要准确在Windows中打开“控制面板”-“字体”查看字体的实际名称不是文件名。例如“微软雅黑”的字体名可能是Microsoft YaHei而“微软雅黑 UI”是Microsoft YaHei UI。字体文件路径你也可以将字体文件通常是.ttf放到游戏目录下的BepInEx\plugins\XUnity.AutoTranslator文件夹内然后在配置中使用相对路径如./myfont.ttf但这种方式更复杂且需要字体文件包含正确的SDFSigned Distance Field数据对于TMP字体。测试配置好后进游戏看带中文的UI如菜单是否正常显示。如果还是方框尝试换一个字体名或者检查游戏是否使用的是老旧的UGUI系统需配置OverrideFont。6. 实战操作启动、翻译与缓存管理完成配置后就可以开始享受自动翻译了。6.1 启动与热键控制启动游戏正常启动游戏。XUA会在后台静默加载。核心热键ALT0打开翻译器选择窗口。如果你配置了多个翻译引擎可以在这里实时切换。ALTT全局切换翻译功能的开启/关闭。当你需要截图或查看原文时非常有用。ALTR强制重新加载所有翻译文件。当你手动编辑了_AutoGeneratedTranslations.txt后按此键无需重启游戏即可生效。F1显示/隐藏BepInEx控制台用于查看日志和错误信息。6.2 理解翻译流程与缓存XUA的工作流是智能且高效的首次出现文本当游戏内一段新文本首次出现时XUA会先检查本地Translation\{Lang}\Text目录下的所有.txt文件包括_AutoGeneratedTranslations.txt是否有完全匹配的翻译。本地缓存未命中如果本地没有它会将这段文本发送给你在Endpoint配置的在线翻译服务。保存到缓存获取在线翻译结果后它会做两件事a) 立即替换游戏内文本。b) 将“原文译文”这对映射追加到_AutoGeneratedTranslations.txt文件的末尾。再次出现文本当同一段文本再次出现时XUA直接在本地缓存文件中找到翻译瞬间完成替换不再请求网络。这个机制意味着首次游玩可能会有一些网络请求导致的短暂延迟取决于文本量和网络速度。后续游玩体验极其流畅几乎零延迟因为所有翻译都已本地化。翻译修正你可以直接打开_AutoGeneratedTranslations.txt搜索机器翻译不准确的句子手动修改等号右边的译文。下次游戏加载时就会使用你的修正版。6.3 手动翻译与高级管理_AutoGeneratedTranslations.txt文件是翻译缓存也是你进行精细化翻译的战场。它的格式很简单原文1译文1 原文2译文2你可以直接编辑它。但更好的做法是创建独立的翻译文件不要在庞大的_AutoGeneratedTranslations.txt里直接修改。可以新建一个MyManualTranslations.txt把需要修正的条目复制进去并修改。XUA会读取Translation\{Lang}\Text目录下所有.txt文件且自定义文件的优先级高于自动生成的文件。这样在插件更新时你的手动翻译不会丢失。使用正则表达式对于有规律变化的文本如“攻击力10”、“攻击力15”可以使用正则表达式进行批量匹配和替换。在翻译文件中添加以r:开头的行r:^攻击力\([0-9])$Attack $1注意正则表达式功能强大但影响性能谨慎使用。翻译作用域如果某个翻译只适用于特定场景或特定游戏版本可以在翻译文件中使用指令#set level 5 只在场景5显示的文本Translation for level 5 only #unset level 5这需要开启EnableTranslationScopingTrue。7. 常见问题与深度排错指南即使按照指南操作也可能会遇到问题。这里是我总结的常见故障及解决方法。7.1 游戏启动崩溃或插件未加载症状游戏无法启动或启动后控制台无XUA相关日志。排查步骤检查框架确认BepInEx安装正确。运行游戏后查看BepInEx文件夹下是否生成了LogOutput.log文件。打开它搜索XUnity.AutoTranslator看是否有加载错误。检查依赖确保XUnity.AutoTranslator插件文件夹内包含了XUnity.AutoTranslator.dll、XUnity.Common.dll、XUnity.ResourceRedirector.dll这三个核心文件。版本冲突游戏使用的Unity版本可能过老或过新与XUA插件不兼容。尝试使用XUA的旧版本或去社区寻找针对该游戏的特殊版本。杀毒软件拦截有时杀毒软件会将注入式的插件误报为病毒。将游戏目录添加到杀毒软件的白名单中。7.2 翻译不生效或部分文本未翻译症状游戏能运行但文字还是原文。排查步骤检查热键是否不小心按了ALTT关闭了翻译按ALT0查看当前翻译器是否已选择。检查配置确认AutoTranslatorConfig.ini中的Language和FromLanguage设置正确Endpoint不为空或指向了正确配置的服务。查看控制台日志按F1打开控制台观察当鼠标悬停在游戏文本上时是否有[XUnity.AutoTranslator]开头的日志输出。如果有Failed to translate错误通常是网络问题或API配置错误。如果有Text hook failed可能是游戏使用了特殊的文本渲染方式。字体问题如果翻译生效但显示为方框□是字体问题。确认OverrideFontTextMeshPro设置的字体名正确或尝试使用FallbackFontTextMeshPro。IL2CPP问题许多较新的Unity游戏使用IL2CPP后端编译对Hook支持不完善。可以尝试在配置文件中[Behaviour]部分设置TextGetterCompatibilityModeTrue。如果问题依旧可能需要使用作者提供的AutoTranslator.IL2CPP.BruteForceFix辅助插件。7.3 在线翻译失败错误 429、403 等症状控制台频繁出现翻译失败的错误或游戏内文本翻译缓慢然后停止。原因与解决频率限制免费翻译API有调用频率和次数限制。解决开启EnableBatchingTrue并适当调低MaxCharactersPerTranslation如设为200。这能减少请求次数。解决更换翻译服务。例如从谷歌翻译切换到百度翻译。解决申请该服务的付费API提升限额。网络连接问题无法访问翻译服务。解决检查网络连接。对于谷歌翻译可能需要配置[Google]部分的ServiceUrl指向一个可用的镜像地址注意此处仅作技术可能性说明用户需自行确保其使用的网络服务和方式符合当地法律法规。解决暂时使用离线模式依靠本地翻译缓存文件游玩。API密钥错误对于百度、DeepL等需要密钥的服务检查AppId和AppSecret或ApiKey是否填写正确是否有空格。7.4 性能问题与游戏卡顿症状开启翻译后游戏明显变卡尤其是在文字密集出现的场景。优化建议禁用纹理翻译如果你没有使用图片替换功能确保[Texture]部分的EnableTextureTranslationFalse。关闭调试日志在[Debug]部分设置EnableLogFalse。优化缓存一个庞大的、未经整理的_AutoGeneratedTranslations.txt文件会影响加载速度。定期清理其中的重复项和无用条目。使用翻译作用域如果游戏很大启用EnableTranslationScopingTrue并合理使用#set level指令可以避免插件在所有场景加载所有翻译提升性能。检查冲突Mod禁用其他Mod排查是否有插件冲突。7.5 高级调试生成与阅读日志当问题复杂时需要借助详细日志。开启详细日志在AutoTranslatorConfig.ini中设置[Debug]部分的EnableLogTrue和EnableConsoleTrue如果使用BepInEx控制台。复现问题启动游戏进行能触发问题的操作。定位日志游戏关闭后在BepInEx文件夹下找到LogOutput.log。用文本编辑器打开搜索[XUnity.AutoTranslator]。分析日志关注ERROR和WARNING级别的信息。常见的有效信息包括Translating [原文] to [目标语言]说明插件捕获到了文本。Failed to translate: ...翻译失败的具体原因。Could not hook ...文本钩子失败可能是游戏UI框架特殊。Loading translation from cache: ...成功从缓存加载翻译。8. 从使用者到贡献者纹理翻译与插件开发当你熟练使用XUA后你可能不再满足于只翻译文字还想替换游戏内的图片UI或者为某个翻译服务编写适配插件。8.1 纹理翻译实战替换游戏内图片假设游戏主菜单的标题是张图片上面是日文你想换成中文。启用纹理功能在AutoTranslatorConfig.ini中找到[Texture]部分设置EnableTextureTranslationTrue EnableTextureDumpingTrue TextureDirectoryTranslation\Texture TextureHashGenerationStrategyFromImageName启动游戏并导出纹理进入游戏遍历各个界面。XUA会自动将游戏加载的UI图片导出到BepInEx\plugins\XUnity.AutoTranslator\Translation\Texture目录下。文件名会包含一个哈希值如title_logo [ABCD1234-EF567890].png。编辑图片用图像处理软件打开导出的图片将上面的日文修改为中文保持图片尺寸和格式不变保存。关闭导出启用替换修改配置EnableTextureDumpingFalse防止再次导出覆盖你的修改保持EnableTextureTranslationTrue。重启游戏此时游戏应该会加载你修改后的中文图片。注意事项纹理翻译功能对性能有影响尤其是开启EnableTextureScanOnSceneLoad时。不是所有图片都能被成功Hook和替换特别是3D模型贴图。绝对不要将开启了EnableTextureDumping的插件分享给他人这会导致他人的游戏也不断导出图片产生大量垃圾文件。8.2 为XUA开发一个简单的翻译器插件如果你想接入一个XUA不支持的翻译API例如某个私有翻译服务可以自己实现ITranslateEndpoint接口。准备开发环境从XUA的Release页面下载XUnity.AutoTranslator-Developer-{VERSION}.zip其中包含开发所需的DLL。创建类库项目在Visual Studio中创建一个.NET Framework 3.5或.NET Standard 2.0的类库项目。引用与编码添加对XUnity.AutoTranslator.Plugin.Core.dll的引用。创建一个类实现ITranslateEndpoint接口或继承自HttpEndpoint等基类。你需要完成Id配置中用、FriendlyName显示名、Initialize初始化如读取API Key、以及核心的翻译方法。处理网络请求建议使用基类提供的XUnityWebRequest它处理了Unity旧版本Mono的SSL证书等问题。在OnCreateRequest中构建请求在OnExtractTranslation中解析返回的JSON/XML获取翻译文本。编译与部署将编译好的DLL放入游戏目录的BepInEx\plugins\XUnity.AutoTranslator\Translators文件夹中。在配置文件中将Endpoint设置为你的插件Id并配置相应的[YourEndpoint]配置节。这个过程需要一定的C#和HTTP编程知识但XUA良好的架构使得实现一个基础的翻译器并不复杂。通过阅读官方源码中GoogleTranslateEndpoint或BaiduTranslateEndpoint的实现可以快速上手。XUnity.AutoTranslator的强大之处在于它构建了一个完整的、可扩展的实时翻译生态。从开箱即用的自动翻译到深度定制的手动修正、纹理替换再到为开发者提供的API和插件接口它覆盖了从普通玩家到硬核Modder的所有需求。安装和配置的初期学习曲线是值得的一旦完成它将成为你畅游无中文游戏世界的得力助手。记住耐心阅读日志、善用本地缓存、逐步调整配置是驾驭这个工具的关键。