
汉化一个Unity游戏从零开始需要多久如果按传统方式拆包、提取文本、翻译、封包、测试新手至少折腾一两天但如果用XUnity.AutoTranslator这种运行时翻译插件整个过程可以压缩到五分钟以内。它不修改游戏任何文件而是在游戏启动后把要显示的文字截获下来调用翻译引擎再把中文结果显示回去属于真正意义上的秒汉化。这篇指南不是官网文档的翻译而是我实打实跑过十几款Unity游戏之后总结出来的完整流程、配置细节和踩坑记录适合从没碰过Mod的纯小白也适合想深度调教的Mod玩家。1. 这个工具到底是什么Unity游戏汉化的另一种思路1.1 传统汉化流程为什么慢先说说平时等汉化补丁的逻辑。汉化组拿到一个游戏要先用AssetStudio这类工具拆包定位到存放文本的资源文件把文本导出成一个表格分给翻译、校对、润色再把它重新打包回游戏资源里最后还要实机测试看有没有乱码、超框、变量错乱。这个流程听起来不难但实际执行时每一步都是坑Unity版本不同资源格式不同、文本里夹杂着大量变量占位符、某些文本是运行时拼接出来的根本不在资源包里。就算全部搞定了游戏一更新文本资源一变补丁就得跟着重做。所以传统汉化做出来的质量确实高但周期很长普通玩家想自己动手门槛也很高。而XUnity.AutoTranslator走的是另一条路它不碰游戏文件只在游戏运行时接管文本显示环节。这样做最大的优势是通用——同一个插件适配所有Unity游戏游戏更新了也不影响因为它翻译的是即将显示出来的文字跟资源版本无关。1.2 运行时翻译和汉化补丁互补可能有人会问既然有实时翻译汉化组是不是没用了不是。XUnity.AutoTranslator翻译出来的东西质量取决于你选的翻译引擎机器翻译再强也容易出现专有名词前后不一致、语气生硬、双关语没有着落这类问题。汉化组人工润色后能达到读起来不像翻译的效果这是机器暂时替代不了的。它真正的价值在于解决汉化还没出但我想立刻玩这个需求。我自己的使用习惯是首发游戏先用这个插件顶着玩熟悉了系统和剧情等汉化补丁出来之后再二周目体验细节。尤其是一些冷门独立游戏可能永远等不到汉化组接坑这时候它就是唯一解。所以它和汉化补丁不是替代关系而是应急和精修的互补关系。1.3 它搞不定哪些游戏认识一个工具最好的方式就是先知道它的边界。XUnity.AutoTranslator名字里带了Unity意味着它只对Unity引擎的游戏生效。非Unity引擎的游戏装了也没用比如虚幻引擎、RPG Maker各有各的翻译方案不在本文讨论范围。判断一个游戏是不是Unity引擎很简单打开游戏根目录看到GameName_Data文件夹或者UnityPlayer.dll文件基本就是Unity游戏。还有一个方法是用记事本打开主程序exe搜UnityPlayer搜到了也是。文本全部做成贴图的游戏插件也截不到因为那些文字显示出来的是图片没有文本属性这种情况要用OCR模式才能勉强处理后面会讲。另外需要联网、文本由服务器下发的游戏插件同样无能为力因为它只能拦截本地需要渲染的文本拦截不到网络包里还没到本地的数据。2. 核心机制拆解游戏文本是怎么被劫持的2.1 BepInEx和Harmony给游戏装上外挂要用XUnity.AutoTranslator第一个绕不开的组件是BepInEx。可以把它理解成Unity游戏的Mod加载器负责在游戏启动时把外部插件加载进游戏进程。XUnity.AutoTranslator本身就是一个BepInEx插件你只是把文件丢进plugins目录剩下的事它全程接管。插件能接管游戏逻辑靠的是Harmony库——一个游戏Mod领域常用的运行时补丁工具。Harmony的原理有点像是给游戏方法的电话线接了个分线盒游戏原本要调用某个Unity文本渲染方法时插件可以在这个方法执行之前和之后插入自己的逻辑截取参数、修改返回值、甚至完全替换原来的行为。XUnity.AutoTranslator对各种文本渲染方法都打上了这种补丁于是每个要显示的文字都会先经过翻译插件的分诊台。2.2 三类Unity UI组件的拦截差异Unity游戏的界面底层可以分为三类UI体系XUnity.AutoTranslator对它们都做了支持但拦截原理各有不同第一类是IMGUI最老的即时模式UI。它用OnGUI里的一堆GUI.Label、GUI.Box、GUI.Button方法来绘制文字每一帧都重新画一遍。插件Hook的是这些GUI绘制方法拿参数里的文字内容去做翻译。第二类是UGUI也就是基于Canvas的UI系统最常见的Unity UI。游戏里大量使用UnityEngine.UI.Text组件插件拦截的是这个组件text属性的调用也就是说在游戏设置Text内容的时候它偷梁换柱把译文替换上去。第三类是TextMeshPro现在主流游戏用得最多的文本组件。TMP在底层重写了文本渲染管线支持富文本、字体特效所以插件需要单独适配它的TMP_Text接口。这也是为什么有时候你会看到插件的Release说明里专门写TMP支持因为Unity游戏里TMP的占比实在太高了。2.3 翻译管线从截获到写回的完整链路搞清楚三类UI的拦截方式后整个翻译流程就很好理解了。游戏想在屏幕上显示一句话时会发生下面的事情游戏调用对应UI组件的文本设置方法XUnity.AutoTranslator的Harmony补丁触发把原始文本抓走插件先在缓存文件里查有没有翻译过这句话缓存命中直接用译文替换原始文本缓存没命中把文本交给翻译端点翻译API或本地模型游戏先显示原文或留空等翻译结果异步返回插件拿到译文再次替换让UI刷新成中文。这个流程解释了为什么你第一次打开游戏时有些文本要等一两秒才变中文而后面的重复对话都是秒出——因为第一次是实时翻译后面全走的缓存。所谓5分钟汉化不是5分钟内把游戏所有文本都翻完而是5分钟内让游戏过程中随时出现的英文文本能自动变成中文这个系统跑起来。2.4 缓存机制省token省钱的关键缓存是XUnity.AutoTranslator里最值得理解的设计。每次翻译结果都会持久化到硬盘存在游戏根目录BepInEx/Translation/zhzh取决于你配置的目标语言下的文本文件里格式是简单的键值对左边原文右边译文。这个机制带来的好处非常实际。第一避免重复调用翻译服务同一个句子在游戏里出现一百次只消耗第一次的翻译额度。第二离线也能用缓存过的文本下次启动游戏直接加载不依赖网络。第三方便手工修正你直接改文本文件里的译文游戏里下次显示就会用你改好的版本。社区里经常有人问汉化一个游戏需要多少token说白了就是新出现的文本量决定消耗量重复文本靠缓存免费。对话量大、支线多的开放世界游戏消耗的字符数肯定比线性剧情游戏多得多但如果你玩的是多周目游戏二周目开始基本不再增加消耗了。3. 5分钟实操从零安装到跑通第一个游戏3.1 安装前的准备实操部分我按最主流的BepInEx XUnity.AutoTranslator组合来讲这也是官方推荐的路径。开始前先做好三件事确认游戏是Unity引擎按上一章说的判断方法看一眼根目录到GitHub Releases页面下载BepInEx注意区分x64和x86版本绝大多数现代游戏都是x64但个别老游戏是x86装错就加载不了下载最新版XUnity.AutoTranslator的Release压缩包。BepInEx的版本选择有个小技巧Unity 2019以上的游戏优先选BepInEx 6.xUnity 5时代的游戏用BepInEx 5.x更稳。如果不确定游戏用的Unity版本先试试新版本启动失败再换旧版。3.2 先装BepInEx并完成首启把BepInEx压缩包解压后里面的文件全部复制到游戏根目录包括winhttp.dll、doorstop_config.ini、BepInEx文件夹这些。注意一个常见的错误有些玩家直接把BepInEx文件夹扔进去就完事少了根目录的几个dll导致框架根本没被加载。然后先不要放翻译插件直接启动游戏一次再退出。这一步是为了让BepInEx完成初始化生成BepInEx/plugins、BepInEx/config这些目录结构。个别游戏启动一次不会生成完整目录多启动一次就好。跑完这一步你的游戏目录里应该能看到BepInEx/plugins这个空目录。3.3 安装翻译插件并生成配置把XUnity.AutoTranslator的zip解压里面的文件通常已经按BepInEx的目录结构放好了直接把BepInEx文件夹和游戏根目录的BepInEx合并就行。启动游戏再退出这时候打开BepInEx/config应该能看到自动生成的新配置文件一般叫AutoTranslatorConfig.ini里面有大量带注释的参数说明。这一步如果配置文件没生成先别急着往下走去BepInEx/LogOutput.log看有没有报错。最常见的报错是插件版本和BepInEx版本不兼容表现为某个dll找不到解决办法就是换取对应版本。这个日志文件是你整个使用过程中最重要的排错入口遇到任何没反应的问题第一时间打开它看。3.4 配置翻译端点在线API与本地模型这是整个汉化流程里最关键的一步。XUnity.AutoTranslator本身不负责翻译它只是一个搬运工真正的翻译能力来自你配置的翻译端点Endpoint。我实际用过的端点里推荐这几类百度翻译开放平台适合国内用户优先尝试注册后开通通用文本翻译拿到APP ID和密钥有免费额度。配置文件里这样写[Translator] EndpointBaiduTranslate AppId你的APPID AppSecret你的密钥DeepL翻译质量在商业API里公认第一档长句通顺、语气自然适合对质量有要求的人。注册DeepL API获取Key选择免费版还是Pro版看预算[Translator] EndpointDeepLTranslateFree ApiKey你的DeepL API KeySakuraLLM本地模型完全免费、数据不出本机而且是专门针对ACG文本微调的模型翻译二次元游戏的对话效果出奇地好。前提是你有一块显存够用的NVIDIA显卡还要会一点简单的本地服务部署。配置的Endpoint需要根据你所用的兼容接口来填一般是SakuraLLM或者某个OpenAI兼容地址。个人实测下来的选择逻辑是一般单机RPG用DeepL文本量大时换百度省成本玩日语原声游戏时优先SakuraLLM。在线端点有个规律是响应速度受网络环境影响免费端点偶尔会抽风。如果你刚好遇到某一天所有句子都迟迟不出译文先考虑是不是端点服务本身的问题。3.5 游戏内验证配置好端点重启游戏进到有文字的地方你现在能看到最神奇的一幕屏幕上原本的英文或日文一两秒后陆续变成了中文。第一屏文本出来会比较慢因为全部是首次翻译等翻完这屏后面的对话基本都是秒切。控制台快捷键也顺便记住CtrlT打开翻译器设置面板CtrlU强制重新翻译当前显示的文本。手工改了翻译文件后想立刻生效就按CtrlU刷新。设置面板里还能看到翻译状态、切换端点、查看当前缓存的统计是个很实用的诊断工具。4. 配置文件逐项解读想精细控制就改这里4.1 Config.ini核心参数XUnity.AutoTranslator的配置项很多但核心常用的就那几个。不同版本默认值略有差异我以最常用的参数为例说明配置项作用我的建议值[General] Language目标语言代码中文填zhzh[General] FallbackLanguage译文为空时的兜底语言zh[Translator] Timeout单个请求超时时间秒60-120[Behaviour] MaxConcurrentTranslations最大并发翻译数100-200[Behaviour] MaxCharactersPerTranslation单次提交翻译的最大字符数500[Behaviour] IgnoreRichText是否忽略富文本标签true[Behaviour] AllowTranslateBelow低于该概率的短文本不翻译看情况设0-10MaxConcurrentTranslations这个参数很多人不调但它直接影响翻译速度。高并发意味着游戏画面里几十条文本可以同时提交不用排队但代价是本地模型会吃满显卡、在线API可能触发限流。保守点用100本地模型显存够大可以拉到200以上。IgnoreRichText建议始终保持true这样b、color这类富文本标签会被原样保留不参与翻译。如果设成false翻译引擎很可能把标签当成普通文字翻掉游戏里就会出现一堆乱码标签。4.2 自定义词汇表让专有名词保持统一机器翻译最容易翻车的就是专有名词。比如一个角色名Reinhart第一句翻成莱因哈特第二句翻成雷恩哈特同一个名字在游戏里出现三个版本很出戏。解决办法是自己维护词汇表。翻译缓存文本文件本质上就是一个大的键值对表你可以在里面手动添加固定词条比如Reinhart莱因哈特 Aetheria艾瑟瑞亚这样XUnity.AutoTranslator在翻译时会优先使用你定义的词条不再经过翻译引擎。对于角色名、地名、专有物品这是提升体验最直接的手段。我的习惯是每次游戏里看到第一次出现的角色名立刻暂停游戏打开翻译文件补一条词条玩完一章基本就把核心名词固定住了。4.3 翻译结果的手工修正除了维护词汇表已有的翻译结果也可以直接改。打开翻译缓存文件找到对应的那一行把等号右边改成你自己的翻译。例如原文是You will not escape this time第一次翻译是你不会逃过这次你觉得太生硬改成这次你插翅难飞保存后在游戏里按CtrlU刷新新译文就生效了。这里有个小技巧翻译缓存文件可以用Excel或Notepad打开排序后按场景查找。但注意大文件动辄上万行建议只改高频重复出现的句子那些只出现一次的句子改和不改对体验影响不大别在细枝末节上浪费时间。4.4 OCR模式图片文字的兜底方案游戏里有些文本是直接被美术做成贴图的比如牌子上的文字、卷轴里的内容、开场动画里的旁白。这种文本没有字符串属性常规模式截不到这时候只能用OCR模式。XUnity.AutoTranslator内置了OCR引擎支持会先对屏幕区域做文字识别再把识别出来的文字送去翻译最后把译文覆盖显示。但说实话OCR模式是兜底方案不是主力方案。它的精度受字体、背景、分辨率影响很大识别错了翻译自然也是错的而且实时OCR很吃CPU。我的建议是遇到关键剧情图片文字干脆截图用外部翻译App扫一下游戏本身的体验别被OCR的卡顿拖垮。5. 实战中的性能与质量调优5.1 翻译延迟过高的排查用久了你会发现翻译速度和文本形式强相关UGUI文本基本秒出TMP文本要看场景复杂度处理得不好时会有明显的原文闪现再变译文过程。遇到延迟过高从三个方向排查看端点响应时间。在线端点本身就有网络延迟国产API通常快一些海外API慢一些。本地SakuraLLM如果显卡不太行速度也上不去。看并发数。把MaxConcurrentTranslations调高文本排队的情况会明显缓解但注意别把本地模型显存撑爆。看单条文本长度。游戏里偶尔会有一条几百字的大段落说明这种必然比短句慢属于正常现象。5.2 翻译质量怎么选端点对比与混合使用不同端点的质量差异我做了个实测选型表端点类型中文质量日语效果速度成本DeepL优秀长句通顺良好中等有免费额度百度翻译中规中矩一般快有免费额度本地SakuraLLM专精ACG游戏感强优秀看显卡免费官方付费API稳定但参差因产品而异快按量计费我的个人经验是主端点用DeepL或SakuraLLM遇到价格敏感的批量文本切百度。实际使用中你不用反复切选一个最顺手的一直用就好。翻译质量调优的核心其实不在端点而在词汇表和手工修正——这也呼应了前面说的这个工具给你的是掌控感而不是完美翻译。5.3 特殊字符与格式符号保护翻译游戏文本最怕什么怕翻译引擎把代码相关的符号一起翻了。游戏文本里经常出现{0}、%s这类变量占位符br、\n这类换行标记以及把玩家名嵌进去的模板。XUnity.AutoTranslator对大多数变量符号有保护机制但保险起见你自己也要养成检查翻译结果的习惯。如果发现某个变量在译文里变成了中文导致游戏里的名字不显示、数值变成0先在配置里确认IgnoreRichText是true再检查文本文件里对应的词条手动把变量符号修正回来。这个坑我在翻译某个数值显示型游戏时踩过一个小数点被翻译成句号整个属性面板全是0.0排查了半天才发现是变量占位符被翻译了。5.4 字体缺失导致的中文方块问题有些Unity游戏自带的字体文件不包含中文字符插件把译文替换上去后游戏用原字体渲染中文结果屏幕上全是方框。这是运行时翻译绕不开的经典问题。处理方案有两种。第一种在配置里找到字体覆盖选项不同版本参数名略有差异指定一个包含中文的字体文件路径比如系统里的微软雅黑插件会强制用它渲染翻译后的文本。第二种如果游戏本身有字体设置或内置多种语言字体直接在游戏设置里切换到包含东亚字符的字体选项。遇到字体问题先别急着改配置确认一下游戏设置里有没有繁体中文或日文字体选项。很多游戏自带的日文字体是包含常用汉字的切过去就能正常显示比改配置省事得多。6. 踩坑实录最容易翻车的几个场景6.1 插件装了但游戏里完全没反应这是问我最多的情况。排查链路我按顺序写一遍打开BepInEx/LogOutput.log确认插件有没有被加载。日志里如果根本没有XUnity.AutoTranslator字样说明插件压根没加载确认游戏根目录的winhttp.dll存在。BepInEx靠它引导启动很多杀毒软件会误删这个文件确认游戏是通过根目录的exe启动的不是通过Steam的某个启动器或反作弊机制启动的。有些游戏有多个exe用了错误的入口就不会加载插件确认BepInEx版本和插件版本兼容。日志里如果报某个dll版本不对去下载对应的Release版本。大多数没反应都出在第二和第三步。6.2 翻译结果精明显没有问题但换行全丢了如果你发现游戏里的段落文本全部挤成一段没有换行这通常是翻译引擎把\n或br当成普通文本处理或者把多行文本合并成一行了。排查思路是打开翻译缓存文件看对应译文里是保留了换行标记还是被自动去掉了。我的解决办法是在配置里开启保留空白符的相关选项或者直接编辑缓存文件给重要的多行文本手动加回换行标记。另外MaxCharactersPerTranslation不要设得太大否则一段超长文本被整体送去翻译引擎很容易把原有排版逻辑打乱。6.3 动态拼接的文本翻不到或乱翻游戏里大量文本是运行时拼接出来的比如你获得了 物品名 x3。这种文本在渲染时可能被拆成多个片段插件逐段翻译后拼回去就会出现语序混乱You obtained 翻成 您获得x3 被翻成 三次方。处理办法是把常见名词先加进词汇表让头尾片段保持稳定遇到实在翻不好的动态拼接文本直接用强制翻译快捷键重新翻一次有时候第二次结果会因为上下文不同而正常。说实话动态拼接文本是运行时翻译的天然难题不可能100%完美别太纠结单条不完美的翻译整体能看懂就行。6.4 和后安装的Mod、框架冲突游戏的Mod生态越丰富插件冲突越容易爆发。如果你同时装了CM3D2的插件管理器、别的Harmony插件或者重度依赖UI改动的ModXUnity.AutoTranslator的补丁可能和其他mod同时修改同一个文本方法导致翻译不生效或者UI渲染异常。遇到这种情况先停用最近安装的Mod确认是不是冲突源如果确认是冲突查一下这两个mod有没有兼容说明或加载顺序要求一般把XUnity.AutoTranslator调成后加载就好。BepInEx的插件加载顺序可以通过plugins目录下的文件名前缀调整加zz_前缀的插件会最后加载。最后分享一下我现在的工作流。拿到一个新Unity游戏我第一件事不是急着进游戏而是先把配置里的语言设成中文、端点选好、MaxConcurrentTranslations调成150用十分钟把主角们出现的每个新名字加到词汇表里。玩到中后期翻译文件里累积的修正条目多了体验会越来越好那种整个游戏的文本都在自己掌控之下的感觉是等汉化补丁体会不到的。这套流程我走了很多遍踩过的坑基本都写在上面了照着走一遍你的第一个游戏汉化应该也能在五分钟内跑起来。