InoryS

新生鸟蛋
2022-03-13
1
3
思考时间
1 分钟
3
合著者&特别感谢 @duli

敬告
虽然本贴本身是全年龄的,但本帖间接或模糊提到了一些非全年龄内容,可能令人不快,请自行选择是否阅读。


开端
最近想玩某款新出的黄油,虽然作者有发过可能会出中文版,但似乎没了下文。苦等很多天以后发现网上出现了所谓的“汉化优化版”很快啊,我下载下来一看。
啊这,不就是用了我之前玩某款游戏熟悉的 XUnity.AutoTranslator (Unity 游戏自动翻译与替换)[以下简称自动翻译插件]嘛。
九折,他的游戏还是老版本,翻译是繁体还没有几句话。
既然如此,不如自己动手(而且官方还提供了英文版)。


初识
根据我之前玩 ???3D2 的经历,大约的确是所有 Unity 游戏都可以用 BepInEx 进行魔改吧。
熟练打开我熟悉的 BepInEx (Unity 和 .NET 游戏的插件和模组框架) ,定睛一看,这款游戏使用的是 IL2CPP 还得最新测试版的 BepInEx 6.0.0 才能安装,测试版就测试版咯。
安装 XUnity.AutoTranslator-BepInEx-IL2CPP [一下简称B版翻译器]版! 工作正常~

迅速配置好自动翻译插件,兴高采烈打开游戏

5QxuFshZGgNRm4v.png


Oh! Xhit! 满屏幕的 口口口 □□□
这款游戏没有中文字库!但是那个“汉化优化版”怎么就能显示呢?

86TujHonGrb2AFW.png


:(
Google 了一番 Unity 口口口怎么办,好像都是要下载 Unity 才行。
最后翻到了 I18NFont4UnityGame,试了一下好像要自己构建才行 pass。

又研究了一番自动翻译配置文件,原来自动翻译插件早就考虑到了
readme 里面有这么一行
代码:
OverrideFontTextMeshPro =          ; 考虑改用 FallbackFontTextMeshPro。更新文本组件时覆盖用于文本的字体。注意:仅适用于 TextMeshPro

啊哈,作者还提供了用于替换的字体 TMP_Font_AssetBundles.zip 芜湖,这就是 Unity 游戏翻译终极解决方案罢!

起飞
gfamt14A2dvz7JO.png

就是字体有一点点丑



深入
突然想起了还有反和谐模组要装,很快啊,在我不知道什么网站 f95zone 找到了反和谐模组,打开压缩包一看,嗯?
这插件是基于 MelonLoader 的?[以下简称西瓜] 让我 Google 一下。原来是另一款 Unity IL2CPP 游戏的插件和模组框架,这下麻烦了。有没有别的方法呢?
又打开反和谐模组研究了一番,这反和谐模组默认打包用的竟然不是纯血的,而是 BepInEx 使用 BepInEx.MelonLoader.Loader [以下简称套娃插件]插件套娃了 MelonLoader。

这样啊,那直接安装套娃插件,再安装反和谐不就成了!

很快啊,又安装好了,进游戏一看,我的翻译怎么没了???
啊这,是西瓜还是套娃的问题呢?
只能每个组合都试试咯。

幸好 XUnity.AutoTranslator 提供了MelonLoader 版 [以下简称西瓜版翻译器],BepInEx 卸载! MelonLoader 安装!

  • 组合1:套娃插件+西瓜版翻译器 → 根本不工作
  • 组合2:套娃插件+B版翻译器 → 翻译功能不工作
  • 组合2:纯血 Bepinex → 没有反和谐
  • 组合3:纯血西瓜 → TextMeshPro 字体替换功能不工作(口口口)

啊这,所有组合都有问题
这不 Google 一番解决方案…………
你猜我找到了什么?已经有人研究过了(这游戏真火)还顺便找到了翻译过的文本
原来西瓜版翻译器不支持字体替换功能啊。
他居然去修改游戏本体文件了,No No No 这不够优雅,不符合我们的气质。
我们需要更优雅的解决方案。

既然什么办法都试过了,那没办法,只能向上游反馈咯
大致看了一眼没有相关的 Issue,于是我反手就交了一个 Issue
交完 Issue 的第二天,我又仔细研究了一下有没有相关的 Issue,您猜怎么着?
还真有,#248 已经报告过了,而且作者发布了一个修复版!(这游戏真的火)

*这个 Issue 的质量太太太太差了! 大家一定要学会像我一样优雅地报告啊!
*有时候大家还是要学会向上游反馈问题,自己埋头苦干有可能久久没有结果,而上游则可以很快帮你解决。这个时代联系上游是很容易的,但一定要注意优雅反馈,提供充足的信息。

啪的一下,安装修复版插件,Wow 所有功能工作正常!有一点点报错但不影响。

终于,第一次进入了游戏,等待我们的……

NatqJhroXUT91KG.png


还是 口口口
岂可修!作者提供的字库不全啊!



再起
好吧好吧,我装 Unity 自己制作 TextMesh Pro 字体包还不行吗。
Unity 安装! 作者在 #182 提供了生成方法,我也通过 Google 在奇怪的论坛(建议别去)找到了详细方法。
西瓜的启动控制台中写明了这游戏是用 2020.03.24f 版做的,我也装了同样的版本。
至于字体嘛,当然是用免费开源好看的思源黑体
随便一翻操作,很快嘛,作者怎么说要半小时。结果发现进游戏一个字也没有,好吧,原来还得选字体范围。
看了眼教程,再搜索了一下,发现得选 Unicode 范围,于是我选了个 CJK 范围。
代码:
4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,0000-052F,2E80-2EFF,3000-4DBF,4E00-9FFF,AC00-D7AF
9HlBjfaS4vPmk6e.png


Oh Xhit 没想到这玩意构建这么慢的,台式不在身边,这小笔记本太弱了。
好,找群友帮忙去了 5900HX 还不是美汁汁。感谢 @duli


你不会想到,这之后,居然折腾了整整 3 天

我们遇到了各种报错,各种 BUG,数不清的问题……

代码:
20-7E,A0-FF,2000-200F,2012-2022,2026,202A-2030,2032-2034,2039-203A,203C,203E,2044,205E,206A-206F,20AC,2122,25A1,4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,0000-052F,2E80-2EFF,3000-4DBF,4E00-9FFF,AC00-D7AF

这个范围输进去他那怎么报错了呢? 我这怎么没事呢?(多了一组重复的,你能找出来吗)
各种匪夷所思的问题,什么网络太差、什么开局报错等数不尽的问题……

换了各种版本,试了各种组合……

产出了第一个版本:

hZpcWajrOiBkq5t.png


emmmm 又是一番调试……
这时候还好,产出一个版本只要大约 30 分钟。


终于,我们产出了可用的第一个版本:
j6v4Vf1NhRTgQB5.png


噗噗,还是没有全角符号。
于是我们组合了更全的范围

代码:
4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,2E80-FE4F,FF00-FFEF,2E80-2EFF,3000-303F,31C0-31EF,2F00-2FDF,2FF0-2FFF,3100-312F,31A0-31BF,3040-309F,30A0-30FF,31F0-31FF,AC00-D7AF,1100-11FF,3130-318F,2800-28FF,3200-32FF,3300-33FF,2700-27BF,2600-26FF,FE10-FE1F,FE30-FE4F,0000-052F,2E80-2EFF,3000-4DBF,AC00-D7AF,2F800–2FA1F,9FA6–9FB3,9FB4–9FBB,9FBC–9FC2,9FC3,9FC4–9FC6,9FC7–9FCB

这总超级无敌全了吧,
西卡西,这么多的字符,配合低效率的 TextMesh Pro,简直就是灾难,毕竟英文就那么几个字符嘛。
如你所见,15.8 万个字符,在 5900HS 上用了约 3 个小时才生成,而我们的字体在这个范围内只有 4.3 万个字符。
很可惜,我们没有精力去排除我们的字体没有的范围了。

zpKtQgEXTZdwmFO.png


这之后,又是各种加载到游戏中不显示字……


好耶,是第二个可用版本:
gjTQklsDdFCqApi.png


这一次该有的字符它都有了,但是,它太细了……
又是一番研究,研究了 TextMesh Pro、研究了 AssetBundle Manager、研究了各种字体格式(这个之后单独发一篇)……
无论怎么选它都只能使用 ExtraLight 字重。
省略研究内容 5000 字。

我们搞明白了 TextMesh Pro 3.0.6 是不支持设置字重的!
而 TextMesh Pro 3.2.0 才开始支持设置一个字体包中的字重,可变字体还是不支持。

于是我们安装了 TextMesh Pro 3.2.0-pre.3 但这之后导出的字体没有一个能用的。
当然,我们在研究的时候不会这么有条理,报错也不打一处来,这我们几乎是最后才知道的。
好了,这下 TextMesh Pro 3.2.0 用不了,我们只好去拆字体。
然后把所有语言的普通版拆出来,合成到一个。

这里找到了拆包的软件(fc2 不是那个啥吗,这研究又是另一回事了)

但我们在合成时遇到了一点小问题,搜索的时候遇到了“我把思源黑体和 Inter 字体合并了 —— Sinter 字体”
文中提到:

“言归正传,这次字体合并的内容,是把 Inter 字体里所有字符都合入到思源黑体中,而思源黑体只保留 CJK 部分 (即中日韩文字以及相关标点) ,其余如阿拉伯数字,英文字母等都由 Inter 来代替。这样在中英混排的时候,就无需来回切换字体,实现一步到位。”


啊哈 CJK 部分不正是我们想要的,但找到文末,没有下载地址,也没有作者留的公众号地址。
嗯?

“声明:本站所有文章,如无特殊说明或标注,均来源于互联网,本站只做文章收集和发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。”

原来是一个垃圾采集站,那没事了。

用文章标题在 Google 进行搜索,找到了一个站酷地址,但很可惜,打开就是

An unexpected error has occurred.

(其实去掉 m. 就行了,但是他们没对电脑访问手机版做处理也挺拉的)(谷歌比较喜欢用手机 UA 去爬)


在谷歌快照里找到了“原文链接”,而这指向的是一个公众号网页…… 是的,公众号是不能被普通的搜索引擎搜索的,必须要在微信里才能搜索到…… 而小程序的本质,不过是 HTML5 页面……
张小龙你 因特网不能搜索还叫因特网吗? 你 是不是又要重新发明互联网,制造互联网孤岛很有意思吗?
不得不说,某些国内互联网企业真的很恶心,到处搞孤岛,丝毫没有一点互联网精神。
顺便送你们一句话,虽然这句话主要是针对“屏蔽网址链接问题”,而不是可搜索互联网。
工信部、国家网信办相继召开会议,聚焦“屏蔽网址链接问题”,推动互联网产业互联互通已成国家意志,各方必须达成共识:互联互通是互联网高质量发展的必然路径。



终结
回到正题。
于是乎,56 分钟后(用 Linux 效率高了点)我们生成了 TextMesh Pro 的 Sinter 字体,这个字体就是前文提到的 Inter + Source Han Sans CJK 的混合体。
6 天的探索之旅似乎结束了,也是时候发布了。

许可证
Inter 字体、Source Han Sans (思源黑体)字体、Sinter 均采用 SIL OPEN FONT LICENSE Version 1.1 许可证,即允许 “分发、复制、嵌入、衍生作品”

发布版 1
基于 Sinter 字体。
  • Unity:2020.3.24f1
  • TextMesh Pro:3.0.6
  • AssetBundles-Browser:1.7.0
  • 字体:Sinter( Inter + Source Han Sans CJK) 1.00
  • 字重:Normal
  • 字符数:30546(包含)/158625(生成范围)
  • 字符范围:简体中文、繁体中文、韩文、日文、英文、符号
  • 链接:https://mega.nz/folder/YiIHkILI#qhKBRGWsJx_W4hlzowDwsA
不带后缀那个即为字体,输出报告、SDF.asset 什么的都在里面了。
kKsY9iavMbTZwNG.png

dOjk73eXEhvmCHQ.png

UtmpXBPGb3fy9CO.png



发布版 2
基于 Source Han Sans 字体。
我们重新研究了合并方式,发现普通的合并方式并不会跳过已有字体,而是进行叠加。
于是我们决定从头开始,直接从源码构建(居然有 21 G),使用 afdko 配合仓库里提供的命令,直接构建。
  • Unity:2020.3.24f1
  • TextMesh Pro:3.0.6
  • AssetBundles-Browser:1.7.0
  • 字体:Source Han Sans CJK (Version 2.004 hotconv 1.1.0 makeotfexe 2.6.0)
  • 字重:Normal
  • 字符数:43687(包含)/158625(生成范围)
  • 字符范围:简体中文、繁体中文、韩文、日文、英文、符号
  • 链接:https://mega.nz/folder/YiIHkILI#qhKBRGWsJx_W4hlzowDwsA
不带后缀那个即为字体,输出报告、SDF.asset 什么的都在里面了。
G1XdNmShtfiQLHp.png



如何使用
应该适合很多 Unity 游戏? 不确定。

注意:
  • OverrideFontTextMeshPro 会覆盖所有字体,某些特效字体会导致显示错乱,请注意。这是无法解决的。
  • FallbackFontTextMeshPro 只会才缺字时才替换,由于不可能和作者用的资源一样,所以肯定会丑,这也是没办法的事。

1.阅读 XUnity.AutoTranslator 的说明。
2.把字体丢到游戏根目录
3.调整 Config.ini 的 FallbackFontTextMeshPro=OverrideFontTextMeshPro= 指向字体目录(根目录直接写文件名)。



后话
之前提到的 翻译过的文本 提供处似乎成立了汉化组? 还换了新的仓库
甚至还提供了了字体,但他们提供的 RiccaV13 的效果嘛……
也许什么时候我会把这个字体提供给他们?

使用 Google 吧,至少使用 Bing。使用百毒的话,也许下辈子也找不到这些东西,倒是百毒随便搜个什么都能跳出来色情联想词,不愧是第一大 X 网。

小知识
思源系列字体是 Adobe 与 Google 所领导开发的开放源代码字体家族中的泛 CJK 字体,目前已有思源黑体与思源宋体两种字体,涵盖了简体中文、繁体中文、日文和韩文在内的所有文字。
Adobe 发布的思源家族字体叫做 Source Han Sans(思源黑体)和 Source Han Serif(思源宋体)。
而 Google 发布的思源家族叫做 Noto Sans(思源黑体)与 Noto Serif(思源宋体),把它们纳入了 Google 的 Noto 字体家族中,仅字重称呼不同。

电脑无法显示的字体,会出现空白的方格(□),这些方格又称为“豆腐”。
而 Noto 字体的目的就是要消灭这些豆腐(意即尽可能地补上缺少的字符),所以“Noto”一词其实源自于“No more tofu”(不再有豆腐)。
今天 Noto 字体家族一共涵盖 800 种语言及 110,000 多个字符。




Did you get anything from here?
Welcome to share!