ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

XUnity自动翻译器实战:不等汉化组,十分钟让你的Unity游戏变成中文

XUnity自动翻译器实战:不等汉化组,十分钟让你的Unity游戏变成中文 XUnity自动翻译器实战不等汉化组十分钟让你的Unity游戏变成中文【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator周五晚上你终于把心仪已久的日式RPG下载完。双击图标加载动画播完满屏日文跳出来的那一刻你和屏幕之间隔着一道语言墙。等汉化组热门作品可能等几个月冷门作品干脆遥遥无期。用手机逐句拍照翻译玩一小时、翻译三小时游戏的乐趣早就被磨没了。如果你玩的那款游戏恰好是Unity引擎开发的那这个问题有一个相当成熟的解法——XUnity自动翻译器。它是一款面向Unity游戏的实时翻译插件游戏里出现的文本会被它截获并交给翻译引擎翻译结果再送回到屏幕上整个过程你几乎感觉不到它中途插了一脚。它兼容大多数Unity游戏内置十余种翻译引擎还会把翻译结果自动缓存同一句话绝不重复翻译。下面我们就沿着一条完整的实战路线从零把它跑起来。不过在动手之前有个关键问题得先回答。先别急着下载先搞清你手上是个什么游戏打开游戏安装目录花两分钟做个体检看看里面有哪些特征文件夹游戏目录里的特征说明对应安装包有BepInEx文件夹装了BepInEx插件管理器Unity模组圈最主流XUnity.AutoTranslator-BepInEx有Mods/UserLibs文件夹装了MelonLoaderXUnity.AutoTranslator-MelonMod有Plugins且是老牌IPA体系装了IPA插件管理器XUnity.AutoTranslator-IPA有UnityInjector文件夹老游戏常用XUnity.AutoTranslator-UnityInjector以上一个都没有纯净游戏XUnity.AutoTranslator-ReiPatcher这里有个冷知识XUnity自动翻译器本身并不依赖任何插件框架它只是借住在这些框架里更省事。就算你的游戏一个框架都没装用独立的 ReiPatcher 方案也能跑——它自带打补丁工具双击一个 exe 就能把翻译功能缝进游戏即装即用。大多数情况下你会遇到第一种毕竟带 BepInEx 的二次元游戏占了半壁江山所以下文以它为例。逻辑完全一样只是换包名而已。三步走从拿到插件到屏幕出现第一句中文第一步把项目拿到本地git clone https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator第二步下载名字里带 BepInEx 字样的发布包解压后整个拖进游戏根目录——注意是覆盖式解压让里面的 dll 各就各位落到BepInEx/plugins等对应位置。第三步直接启动游戏。第一次运行插件会默默做三件事在BepInEx/config下生成AutoTranslatorConfig.ini配置文件、自动创建Translation目录BepInEx 方案下位于BepInEx/Translation、然后立刻开始干活。你什么都不用配先默认跑起来再说。这里有个值得称赞的小细节插件遇到新文本时会先等一秒钟确认这段文本稳定不变了才送去翻译。为什么因为很多游戏的字是一个一个蹦出来的抢跑只会翻译到半句话。这个防抖机制后面你还会在很多地方体会到它防止刷屏的用心。进游戏随便点开几句对话几秒钟后中文就顶上来了。想验证效果随时按ALTT在原文和译文之间切换对比按ALT0呼出翻译设置界面。然而第一句中文出来只是开始。接下来这三个坑几乎每个新手都会踩提前知道能省你一下午。第一句中文出来了但三个坑马上就会来找你坑一中文全变成口口口。最经典的一幕译文有了游戏里却全是方块。原因很简单——游戏自带的字体文件里根本没有中文字形系统渲染不出字符只能画方块。解决办法是给游戏喂一个带中文字形的字体UGUI 界面在配置里设OverrideFont指向一个中文字体文件TextMeshPro 界面则优先用FallbackFontTextMeshPro加一个兜底字体比整体替换更稳妥。坑二译文把按钮和对话框撑爆了。中文通常比日文更占地方同一句台词译成中文可能长出一截。别慌插件默认开了尽力而为的UI自适应EnableUIResizingTrue会自动调整组件的溢出处理方式。还不够的话可以在翻译目录里放一个以resizer.txt结尾的文件按 UI 路径精调字号CharaCustom/CustomControl/CanvasDrawChangeFontSizeByPercentage(0.5)意思是把指定路径下所有文字的字号缩到原来的 50%。坑三有些文字纹丝不动。翻译插件不是万能的它要靠钩子可以理解为游戏和插件之间的监听器去抓文本。出于性能和稳定性考虑部分文本框架默认是关着的——比如飘在3D场景里的TextMesh文字、以及不少模组界面用的IMGUI。如果发现游戏里某块文字始终不翻译去配置文件[TextFrameworks]小节把对应的EnableTextMeshTrue或EnableIMGUITrue打开再按ALTU手动触发一次挂接多半就通了。等文字能显示、也能显示对了下一个话题自然是翻译得准不准翻译质量一般换引擎、加词典、手动兜底一条龙默认配置用的是 GoogleTranslate——免费、免注册、开箱即用但免费接口的稳定性和质量只能说能用。想要更好的体验可以走这几条路换更合适的引擎。项目内置的翻译引擎相当齐全免费的有 Google、Bing、DeepL、Papago追求稳定高质量可以上 DeepL 或各家的付费 APIGoogle Cloud、Azure、百度、Yandex、IBM Watson 都有对应实现还有两种本地翻译器——LEC Power Translator 15 和 ezTrans XP后者是日语游戏玩家的老朋友不需要联网。配置就一行[Service] EndpointDeepLTranslate FallbackEndpointGoogleTranslateFallbackEndpoint是容易被忽略的好东西主引擎万一挂掉请求会自动降级到备胎游戏体验几乎不中断。另外记得在[General]里把FromLanguageja明确写上——手动指定源语言比依赖auto 自动检测更可靠也能避免插件把片假名英语误判成别的语言。用词典纠正专有名词。机器翻译最怕人名、地名、装备名这类专有名词经常翻得离谱。项目提供替换表机制文件在Translation\{语言}\Text\_Substitutions.txt格式一行一条魔王Demon King 勇者Hero 聖剣Holy Sword替换发生在翻译之前相当于给引擎划重点。它还支持参数化让替换结果参与后续拼装比如私は{{A}}I am {{A}}{{A}}会原样保留再拼回句子里。手动修正不完美的地方。这是 XUnity自动翻译器最良心的一点每次翻译都会落盘。自动翻译的结果写进_AutoGeneratedTranslations.txt你随时能用文本编辑器打开把翻得不好的条目改掉下次直接生效——按ALTR还能即时热重载不用重启游戏。如果想让某个条目永久正确把它从自动生成文件里剪切到自己新建的翻译文件即可手动文件的优先级更高。到这里普通玩家的体验闭环已经完整了。但如果你是那种想把游戏彻底汉化干净的人还有两件高级武器。再进一步正则、纹理与自定义翻译正则表达式翻译。游戏里充斥着物品数量等级数字这类文本比如シンプルリング 1、シンプルリング 2……逐条翻译既费配额又容易漏。正则就是为它们准备的放在翻译文件里以r:开头r:^シンプルリング ([0-9])$Simple Ring $1它匹配所有单词空格数字的文本数字自动保留一条规则顶一百句。还有更高级的拆分器正则sr:开头能把游戏拼在一起的文本先拆开、分别翻译、再拼回去专门对付编号名字这种混合条目。纹理翻译。有些游戏的文字是直接画在图片里的比如标题画面、立绘上的字文本钩子抓不到只能走图片路线开启纹理转储EnableTextureDumpingTrue插件把游戏贴图导出到Translation\{语言}\Texture目录你用图像工具把上面的字改成中文原样放回再开启EnableTextureTranslationTrue游戏里就会加载你改过的版本。这是做完整汉化包的关键技术。自定义翻译引擎。项目对开发者也很友好src/Translators/下每个翻译器就是一个独立小项目实现ITranslateEndpoint接口就能注册自己的翻译源社区里甚至有人做了接入本地大模型的离线翻译器。想了解内部机制的可以翻翻 src/XUnity.AutoTranslator.Plugin.Core/Endpoints/ 的接口定义代码并不复杂。聊点实际的吧——把别人翻车的故事提前讲给你听比你自己翻一次车划算多了。老玩家的避坑问答这些坑我替你踩过了Q装上之后游戏一应用译文就卡死或行为错乱A有些游戏会拿屏幕上的文字当逻辑判断依据比如检测你是否选中了某个选项。插件把字换了游戏就看不懂了。解法是开兼容模式把TextGetterCompatibilityModeTrue让插件骗游戏它读到的还是原文。Q翻译了一会儿突然全停再也不动了A大概率是免费接口限流或失效也可能是触发了插件的自我保护——它为了防止把游戏搞崩设了很多保险丝单次会话最多发 8000 个翻译请求、同一时间只发一个请求、连续失败就自动停机。对策是先看日志确认原因修好问题比如换了网络环境后按ALTQ重启插件或者干脆换引擎——这时FallbackEndpoint就派上用场了。Q为什么别的模组的界面没被翻译A前面说过模组界面大多是 IMGUI默认关闭EnableIMGUITrue打开即可。如果开了还不行游戏可能是 IL2CPP 打包的一种 Unity 的编译方式这类游戏对钩子的支持还不完善属于已知局限。Q翻译文件被我改乱了想重新来过A清空Translation目录下对应语言文件夹里的内容即可插件下次运行会重新生成。注意别误删XUnity.ResourceRedirector相关目录其他插件可能依赖它。你的第一个目标今晚就玩上那款游戏回到开头那个周五晚上——如果你手里正好有一款因为语言迟迟没通关的 Unity 游戏现在剧本可以改写了clone 仓库、选对安装包、启动游戏、改三行配置Language、FromLanguage、Endpoint剩下的交给插件。快的话十分钟内就能看到第一句中文慢的话也就是在字体和引擎选择上多花点时间而这两件事这篇文章里都已经给过答案。这款工具的好处在哪它不追求一步到位而是给你一条渐进的路先用免费引擎跑通再换高质量引擎再用词典和手动翻译打磨细节最后甚至可以自己动手写翻译器。整个过程不需要你懂编程需要你做的只是别在第一步就放弃。今晚的目标很简单让那款吃灰的游戏变成你能读懂的样子。【免费下载链接】XUnity.AutoTranslator项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进