XUnity.AutoTranslator:Unity游戏实时翻译框架的深度配置与实战指南

📅 2026/7/12 12:06:43
XUnity.AutoTranslator:Unity游戏实时翻译框架的深度配置与实战指南
1. 项目概述为什么我们需要XUnity.AutoTranslator如果你和我一样是个喜欢尝鲜各种独立游戏、视觉小说或者小众Unity作品的玩家那你肯定没少被语言问题困扰过。看着Steam上那些评价不错但只有日文、韩文或者俄文的游戏只能望而却步这种感觉太难受了。传统的汉化补丁虽然好但往往“一游一补”更新慢适配难遇到冷门游戏更是无人问津。XUnity.AutoTranslator后文简称XUA的出现就是为了解决这个痛点。它不是一个针对特定游戏的汉化包而是一个通用、实时、可高度自定义的Unity游戏翻译框架。简单来说它像是一个“外挂”在游戏进程上的智能翻译层能够拦截游戏运行时显示的所有文本调用你配置的翻译服务如谷歌、百度、DeepL等进行实时翻译并将结果替换回游戏界面。它的核心价值在于“自动化”和“通用性”。你不再需要等待某个汉化组发布特定版本的补丁对于任何基于Unity引擎开发的游戏只要XUA能成功注入你就有机会立刻获得一个“机翻”版本先玩起来。虽然机翻质量无法与精翻媲美但对于理解剧情、推进游戏进程来说往往是绰绰有余的。更强大的是它支持手动修正翻译、替换游戏内图片如UI图标、菜单文字图、自定义字体甚至能为其他Mod提供翻译支持其可玩性和扩展性远超一个简单的翻译插件。在接下来的内容里我不会只复述官方文档。我会结合我多年折腾各种Unity游戏Mod的经验带你从零开始彻底吃透XUA的配置、调优和高级玩法让你不仅能“用上”更能“用好”这个神器真正打破语言壁垒。2. 核心机制与架构拆解它到底是怎么工作的要玩转XUA不能只停留在“复制文件到Plugins文件夹”的层面。理解其底层工作原理能让你在遇到问题时快速定位甚至进行高级定制。2.1 核心工作流程文本拦截与替换XUA的核心工作流可以概括为“拦截-查询-替换”三步循环拦截Hooking这是最关键的一步。XUA通过Harmony或MonoMod等代码注入库在游戏运行时动态修改Unity引擎中用于显示文本的组件如UnityEngine.UI.Text、TextMeshPro、NGUI Label等的相关方法。当游戏调用这些方法设置文本内容时XUA的代码会先一步拿到这个“原始文本”。查询Lookup拿到原始文本后XUA会先在本地翻译缓存文件通常是Translation\{Lang}\Text\_AutoGeneratedTranslations.txt中查找是否有现成的翻译。如果没有则会根据你的配置将文本发送给指定的在线翻译服务Endpoint进行翻译并将结果保存到本地缓存以备下次使用。替换Replacing将找到的或翻译好的文本设置回游戏的文本组件完成显示替换。同时它还会智能处理一些UI适配问题比如文本过长导致的显示不全。这个过程几乎是实时、无感的。你按下ALT0打开配置窗口选择翻译语言游戏内的文本就会逐渐被替换成目标语言。2.2 两大核心模块AutoTranslator 与 ResourceRedirectorXUA项目实际上包含两个相对独立的核心DLLXUnity.AutoTranslator.Plugin.Core.dll这是翻译功能的主体。负责文本的拦截、翻译流程管理、缓存、配置读取等所有与“翻译”相关的逻辑。XUnity.ResourceRedirector.dll这是一个更底层的资源重定向库。它的职责是拦截Unity引擎加载资源如AssetBundle、Resources文件夹中的资源的调用并允许你将加载路径重定向到你自己准备的文件上。XUA利用它来实现两个高级功能TextAsset重定向直接替换游戏内的文本资源文件如.txt,.json,.xml实现更彻底、更稳定的翻译尤其适合大量静态文本的游戏。纹理Texture替换替换游戏内的图片资源比如把日文的按钮图标直接换成中文的图片。理解这两个模块的分离很重要。这意味着即使你不使用AutoTranslator的实时翻译功能ResourceRedirector本身也是一个强大的Mod开发工具可以被其他插件用来修改游戏资源。而AutoTranslator则是ResourceRedirector的一个“高级用户”用它来实现文本替换。2.3 支持的翻译服务与选择策略XUA内置了众多翻译端点Endpoint你需要根据网络环境、翻译质量需求和成本来选择合适的。端点名称 (Endpoint)特点与适用场景是否需要API Key/配置GoogleTranslate默认选项质量相对稳定支持语言多。但需要网络能正常访问谷歌翻译服务。否但可能受网络限制BaiduTranslate国内网络友好翻译速度较快对中英互译有优化。是需要申请百度翻译开放平台的AppID和密钥DeepLTranslate公认的翻译质量天花板尤其擅长欧洲语言。有免费额度超出需付费。是DeepLLegitimate需API KeyChatGPT需要额外插件翻译质量高且更“人性化”能更好处理游戏语境、俚语。但成本高、速度慢。是需要OpenAI API Key及第三方插件PapagoTranslate擅长韩语翻译。否Custom自定义端点需要自己实现ITranslateEndpoint接口或搭建翻译API服务器。依赖自定义实现个人经验与选择建议新手尝鲜直接使用GoogleTranslate。如果无法访问可以尝试在配置文件中寻找ServiceUrl配置项但请注意相关服务的使用合规性。国内玩家主力首选BaiduTranslate。去百度翻译开放平台注册一下免费额度对于个人玩家来说完全够用速度和稳定性都有保障。追求极致质量尤其西语、德语等使用DeepL。虽然要填API Key但其翻译质量对游戏体验提升是肉眼可见的尤其是剧情文本。特殊需求如果你玩的是韩语游戏Papago是不二之选如果你有编程能力且对某个小众翻译引擎有需求可以研究Custom端点。配置翻译端点很简单在游戏内按ALT0打开配置窗口在“翻译”选项卡中选择即可。更详细的配置如API Key则需要编辑Config.ini文件。3. 从零开始安装、配置与基础调优网上很多教程只告诉你怎么安装但没告诉你为什么这么装以及装完后第一步该调什么。这里我结合不同游戏环境给你讲透。3.1 安装方式选择与实战步骤XUA支持多种Mod加载器你需要根据游戏使用的框架来选择。1. BepInEx 5/6 (最主流)这是目前Unity游戏Mod社区的事实标准。绝大多数Unity游戏Mod都基于BepInEx。步骤确认游戏已安装BepInEx。通常游戏根目录会有BepInEx文件夹和winhttp.dll等文件。下载XUnity.AutoTranslator-BepInEx-{VERSION}.zip。解压后将BepInEx文件夹内的所有内容合并到游戏根目录的BepInEx文件夹里。重点是plugins文件夹下的XUnity.AutoTranslator。启动游戏如果安装成功屏幕左上角会出现XUA的版本信息按ALT0可以打开配置窗口。2. MelonLoader一些较新的游戏可能使用MelonLoader。步骤确保MelonLoader已正确安装。下载XUnity.AutoTranslator-MelonLoader-{VERSION}.zip。解压后将Mods文件夹内的XUnity.AutoTranslator.dll及其依赖项复制到游戏的Mods目录。将UserData文件夹内的XUnity.AutoTranslator文件夹复制到游戏的UserData目录MelonLoader的配置和翻译文件存放处。3. 通用注入器 (如UnityInjector)适用于没有标准Mod框架的老游戏。步骤下载XUnity.AutoTranslator-ReiPatcher-{VERSION}.zip。运行解压后的注入器选择游戏主程序.exe进行注入。这个过程会修改游戏程序集务必提前备份原版游戏文件。关键检查点安装后第一次运行游戏请务必打开游戏根目录下的BepInEx\config\AutoTranslatorConfig.ini或其他加载器对应的配置路径。如果这个文件被成功创建说明插件加载成功了。接着按ALT0看配置窗口能否弹出。这两步是验证安装成功的黄金标准。3.2 核心配置文件Config.ini详解与调优游戏内按ALT0的配置窗口只能修改部分常用设置。真正的力量藏在AutoTranslatorConfig.ini文件里。我们用“开箱即用”的思路先调整几个立竿见影的配置。[General] ; 翻译语言例如 zh-CN (简体中文), en (英文), ja (日文) Languagezh-CN ; 源语言通常是游戏原始语言如果留空则自动检测 SourceLanguage ; 使用的翻译服务如 GoogleTranslate, BaiduTranslate, DeepLTranslate EndpointGoogleTranslate [Behaviour] ; 是否启用自动翻译。设为False则只加载本地翻译文件不进行在线翻译。 EnableTranslationTrue ; 最大翻译字符数。超过此长度的文本如一整本日记不会被翻译避免API滥用和性能问题。建议保持默认或设为500。 MaxCharactersPerTranslation500 ; 是否启用UI自动调整大小。翻译后文本变长可能导致显示不全开启此项让XUA尝试调整文本框。**强烈建议开启**。 EnableUIResizingTrue ; 是否强制所有UI组件调整大小。如果EnableUIResizing效果不佳可以尝试开启此项但可能影响UI布局。 ForceUIResizingFalse [Texture] ; 是否启用纹理图片翻译。如果你想替换游戏内的图片UI比如带文字的按钮需要开启此项。 EnableTextureTranslationFalse ; 纹理文件存放目录 TextureDirectoryTranslation\Texture几个必须立刻修改的配置项Language和Endpoint这是基础根据你的需求设置。EnableUIResizingTrue90%的显示问题都源于翻译后文本溢出文本框。开启这个选项能解决大部分问题。如果开启后仍有问题再考虑ForceUIResizing或手动编写resizer.txt规则高级功能。MaxCharactersPerTranslation非常重要有些游戏会把大段文本如百科、代码x作为一个字符串加载。如果直接翻译会向API发送一个超长请求可能导致翻译失败、被封IP或游戏卡顿。设置一个合理的上限如500能有效避免这个问题。官方文档强调分发Mod时此值绝不能大于400以遵守大多数翻译服务的条款。EnableTextureTranslation除非你确定要替换游戏内图片否则保持False。开启后会对性能有一定影响且需要你自己准备替换用的图片。3.3 字体问题终极解决方案翻译非拉丁语系语言如中文、日文、韩文时游戏原版字体很可能不包含这些字符导致翻译后显示为“口口口”或空白。XUA提供了多种字体解决方案方案A使用内置的TextMeshPro回退字体推荐最简单这是针对使用TextMeshProTMP的现代Unity游戏。在配置文件中找到或添加[Behaviour] FallbackFontTextMeshProFonts Materials/LiberationSans SDF FallbackLiberationSans SDF Fallback是TMP自带的资源通常游戏里都有。如果无效可以尝试Fonts Materials/ARIAL SDF。方案B加载系统字体如果游戏使用的是较新的TextMeshPro3.2.0可以尝试直接指定系统字体名。[Behaviour] OverrideFontTextMeshProMicrosoft YaHei UI将Microsoft YaHei UI替换为你系统中已安装的、包含目标语言字符的字体名称如SimHei黑体NSimSun新宋体。方案C使用自定义AssetBundle字体最彻底最复杂如果以上方法都无效你需要制作一个包含目标语言字符的字体AssetBundle。你需要Unity Editor版本尽量与游戏一致。创建一个Font Asset包含你需要的所有字符。将其打包成AssetBundle。将生成的.assets文件放入游戏根目录或BepInEx\plugins\XUnity.AutoTranslator目录。在配置中指定该AssetBundle的文件名不含扩展名。[Behaviour] OverrideFontTextMeshProMyChineseFontBundle踩坑实录字体问题是最常见的“拦路虎”。我的经验是优先尝试方案A因为它是无侵入的。如果游戏崩溃或无效再尝试方案B。方案C是最后的手段除非你是Mod作者打算分发完整汉化包否则个人使用成本太高。另外有些老游戏使用传统的Unity UI Text这时需要使用OverrideFont配置项但原理类似同样需要字体AssetBundle。4. 高级玩法与实战技巧从能用走向好用基础配置只能让你“看到”翻译。但要获得良好的游戏体验还需要下面这些进阶操作。4.1 手动修正与翻译管理打造你的专属词库机器翻译再强在游戏专有名词角色名、技能名、道具名面前也会翻车。XUA的强大之处在于所有自动翻译的文本都会保存在Translation\{语言代码}\Text\_AutoGeneratedTranslations.txt里。你可以直接编辑这个文件进行手动修正。文件格式很简单原始文本翻译后的文本例如谷歌把“Healing Potion”翻译成了“治疗锅”你可以改为Healing Potion治疗药水保存文件后在游戏中按ALTRXUA会立即重新加载所有翻译文件你的修正即刻生效。高级技巧翻译作用域与优先级XUA会读取Translation\{语言代码}\Text\目录下所有.txt文件。你可以把修正的翻译单独放在一个新文件里比如Items.txt。优先级规则后加载的文件优先级更高。XUA按文件名排序加载你可以通过给文件加数字前缀来控制顺序例如01_Core.txt,02_Items.txt,03_Dialogue.txt。_AutoGeneratedTranslations.txt这个自动生成的文件优先级最低。作用域指令你可以在翻译文件中使用指令让某些翻译只在特定场景或特定游戏版本生效。这需要开启EnableTranslationScopingTrue。#set level 5 ウルフ野狼 #unset level上面这段的意思是只有在场景ID为5时“ウルフ”才会被翻译成“野狼”其他场景则使用默认翻译或自动翻译。4.2 正则表达式Regex的妙用批量处理与复杂规则当游戏文本带有变量或格式时简单的一对一翻译就不够了。比如游戏里显示“获得了 {0} x{1}”其中{0}是物品名{1}是数量。XUA支持正则表达式翻译。标准正则翻译 在翻译行前加r:。r:^获得了 (.) x([0-9])$获得 $1 $2个这个正则会匹配“获得了 苹果 x5”这样的文本并将其替换为“获得 苹果 5个”。分割器正则Splitter Regex 更强大的是分割器正则sr:。它能把一个组合文本拆分成多个部分分别翻译后再组合回去。这对于处理带前缀编号或格式固定的文本非常有效。sr:^([0-9]{2})_([\S\s])$$1_$2假设游戏里有文本“01_攻击力上升”这个正则会将其拆分成“01”和“攻击力上升”。XUA会去查找“攻击力上升”的翻译比如“Attack Up”然后组合回“01_Attack Up”。这样你只需要翻译“攻击力上升”这一个词条就能处理所有“XX_攻击力上升”的变体。重要提醒正则表达式虽然强大但滥用会严重影响游戏性能。务必确保你的正则表达式是精确的并且只在必要时使用。对于固定文本永远使用普通的键值对翻译。4.3 资源重定向Resource Redirector实战替换图片与静态文本这是XUA的“重型武器”。当实时文本替换遇到困难比如文本是图片的一部分或者游戏以特殊方式加载文本时可以直接替换游戏资源。1. 启用TextAsset重定向[ResourceRedirector] EnableTextAssetRedirectorTrue EnableDumpingTrue开启后运行游戏XUA会把游戏加载的所有TextAsset资源如.txt,.json,.xml导出到Translation\{语言代码}\RedirectedResources目录下。你可以直接编辑这些导出的文件进行翻译。下次游戏启动时XUA会加载你修改后的版本而不是游戏原版文件。优点翻译彻底一劳永逸不依赖在线API。缺点需要手动翻译大量文本且游戏更新后可能需要重新导出和适配。2. 纹理图片替换如果你想汉化游戏内的图片UI比如主菜单、技能图标上的文字需要开启纹理翻译。[Texture] EnableTextureTranslationTrue EnableTextureDumpingTrue ; 首次使用时开启用于导出图片 TextureHashGenerationStrategyFromImageName ; 推荐使用性能最好运行游戏它会将游戏中的纹理图片导出到Translation\Texture目录文件名会包含一个哈希值用于标识。你可以用PS等工具编辑这些图片比如把日文P成中文然后放回原目录。确保编辑后的图片文件名中的哈希值部分不被改动。再次运行游戏这些图片就会被替换。性能提示EnableTextureDumping和EnableTextureScanOnSceneLoad只在导出图片时开启导出完成后务必关闭否则会严重拖慢游戏加载速度。分发提示如果你制作了纹理翻译Mod进行分发请使用TextureHashGenerationStrategyFromImageName并删除所有未修改的图片以减小体积。4.4 与其他Mod的兼容与互操作XUA在设计时就考虑到了Mod社区生态。避免翻译其他Mod的UI如果你的游戏装了其他Mod它们的UI可能也被翻译导致乱码。你可以在配置中设置黑名单[Behaviour] BlacklistedIMGUIPluginsMyOtherMod;AnotherPlugin或者Mod作者可以在其UI的GameObject名称中包含“XUAIGNORE”这样XUA就会跳过该组件的翻译。包含“XUAIGNORETREE”则会忽略该物体及其所有子物体。为其他Mod提供翻译你可以为特定Mod创建专属的翻译文件。在Translation\{语言代码}\Text\下创建Plugins文件夹再在里面为每个Mod创建一个以该Mod的DLL文件名不含扩展名命名的文件夹将翻译文件放进去即可。你甚至可以在翻译文件中使用#enable fallback指令让Mod专用翻译找不到时回退到全局翻译。Mod作者集成Mod作者可以直接在代码中调用XUA的API来查询翻译或者注册自己的翻译文件实现深度集成。5. 疑难杂症排查与性能优化即使按照指南操作也难免会遇到问题。这里我总结了一份“急救手册”。5.1 常见问题速查表问题现象可能原因解决方案游戏启动崩溃1. XUA版本与游戏/Mod加载器不兼容。2. 与其他Mod冲突。3. 配置文件格式错误。1. 检查并下载对应游戏框架BepInEx/MelonLoader的XUA版本。2. 暂时移除其他Mod单独测试XUA。3. 检查AutoTranslatorConfig.ini特别是引号、等号的使用。翻译不显示/全是口口1. 字体不支持目标语言字符。2. 翻译服务未响应或网络问题。3. UI组件未被正确Hook。1. 参考3.3 字体问题终极解决方案。2. 按ALT0检查Endpoint是否选中尝试切换其他服务如Baidu。开启EnableLogTrue查看错误信息。3. 对于IL2CPP游戏尝试使用AutoTranslator.IL2CPP.BruteForceFix辅助插件。翻译后文本显示不全/重叠文本框大小固定翻译后文本过长。1. 确认[Behaviour]下EnableUIResizingTrue。2. 如果无效尝试ForceUIResizingTrue谨慎可能破坏UI。3. 高级方案创建resizer.txt文件手动指定组件路径和缩放比例。翻译延迟严重或游戏卡顿1. 在线翻译API响应慢。2. 启用了纹理导出或扫描。3. 正则表达式过于复杂或翻译文件巨大。1. 换用更快的翻译服务如Baidu或使用离线翻译引擎需自行实现。2.关闭EnableTextureDumping、EnableTextureScanOnSceneLoad。3. 优化或移除不必要的正则表达式清理_AutoGeneratedTranslations.txt中的垃圾条目开启OutputUntranslatableTextFalse。部分文本未被翻译1. 文本长度超过MaxCharactersPerTranslation。2. 文本包含特殊格式或富文本标签。3. 该文本被游戏以特殊方式处理。1. 适当调大MaxCharactersPerTranslation不超过1000。2. XUA默认会尝试处理富文本但可能不完美。可以尝试在配置中调整IgnoreRichText等选项。3. 尝试开启TextGetterCompatibilityModeTrue这能“欺骗”游戏使其认为显示的仍是原始文本。ALT0配置窗口不弹出1. 插件未成功加载。2. 热键冲突。1. 检查BepInEx\plugins\XUnity.AutoTranslator目录是否存在且文件完整。查看BepInEx\LogOutput.log寻找错误信息。2. 尝试其他热键如ALT反引号。配置文件可以修改热键但需要查源码或社区文档。5.2 IL2CPP游戏的特别注意事项越来越多的Unity游戏使用IL2CPP后端编译这给动态Hook带来了挑战。XUA对IL2CPP的支持是“实验性”的。文本Hook可能不完整有些动态更新的文本如实时对话可能无法被捕获。解决方案是使用社区提供的AutoTranslator.IL2CPP.BruteForceFix插件它会尝试更积极地进行Hook。部分功能缺失TextGetterCompatibilityMode、IMGUI翻译等功能在IL2CPP下可能不可用。稳定性风险在IL2CPP游戏上使用XUA游戏崩溃的风险略高于Mono后端游戏。务必经常存档。给IL2CPP游戏玩家的建议降低预期将其视为一个“辅助工具”而非完美解决方案。优先使用BaiduTranslate等国内可快速访问的服务以减少延迟。积极使用手动翻译缓存将在线翻译的结果固化到本地文件里减少运行时对API的依赖。5.3 性能优化黄金法则缓存为王XUA的核心优势在于本地缓存。第一次翻译某句文本后后续再遇到直接从本地文件读取速度极快。因此游玩初期耐心等待在线翻译实际上是在为后续流畅体验铺路。你可以有意在游戏开始阶段把各个菜单、选项都点开一遍让XUA完成初步的缓存建设。关闭调试和导出功能在正常游玩时确保以下配置为False[Behaviour] EnableLogFalse [Texture] EnableTextureDumpingFalse EnableTextureScanOnSceneLoadFalse DetectDuplicateTextureNamesFalse [ResourceRedirector] LogAllLoadedResourcesFalse EnableDumpingFalse精简翻译文件定期打开_AutoGeneratedTranslations.txt删除那些明显无意义的翻译条目比如单个符号、乱码、过长的系统日志文本。一个干净整洁的翻译库能提升查询速度。慎用正则和纹理这两者都是性能消耗大户。只在必要时使用精确的正则表达式纹理替换则用于关键UI即可。折腾XUnity.AutoTranslator的过程本身就像是在玩一个关于“解构与重建”的元游戏。从最初的磕磕绊绊到后来能游刃有余地为一款冷门游戏打造出可用的翻译环境这种成就感是独特的。它不仅仅是一个工具更是一把钥匙为你打开了无数扇原本紧闭的语言之门。记住机翻只是起点真正让游戏体验变得舒适的往往是你亲手添加的那几条关键的手动翻译。