Unity游戏汉化,汉字不显示并呈现“□□”字样 问题解决
蓝_卡
2025年01月23日 11:31

1、背景

最近在做一款重装机兵同人Chrome Wolf的个人汉化版本,尽管已有安卓版的汉化版本钢铁孤狼,但一是过于老旧,和现在的安卓版本不兼容,二是PC版容量更大,内容更丰富。将相关汉化文件替换完成后,运行游戏,发现部分汉字无法显示,并呈现“□□”字样

2、原因

unity的UI文本组件TextMeshPro默认使用Liberation Sans.ttf字体,由该字体生成的字符集并不支持中文,而上面的游戏初步汉化后还能显示部分汉字,原因是ChromeWolf由日本厂商制作,日文里面包含一部分汉字,而那些未包含显示的字符,就自动显示为“□□”了

3、解决

接下来我会详细地记述问题解决的每一个步骤,力求让这篇文章的实操性拉满

(1) 用AssetStudio打开游戏ChromeWolf,目的是获取原版游戏的unity版本号,例如我的是2021.3.6f1,牢牢记住一个字母和数字都不能错,这很重要!我就是以为2021.3开头的版本就行了,结果浪费好多时间

(2)前往unity官网下载对应的版本,浏览器会自动调用unity Hub开始安装,完成时如下

网址 https://unity.com/releases/editor/archive

(3) 选择刚下载的版本新建游戏项目,不要粗心使用了默认的

(4) 空白处右键,依次点击 3D Object -> Text -> Text-TextMeshPro,弹出的TMP Importer选择Import TMP Essentials就够了

(5) TextMeshPro就默认下载并配置好了

(6) 此时默认出现的文本为"Sample text",在右边的Text Input里输入汉字,输入几个字,便出现几个"□",这是默认状况

(7)在电脑的C:\Windows\Fonts目录下,挑选需要的字体并复制出来,我喜欢楷体,所以复制的是simkai.ttf文件

(8) 下载中文字体字符集,我选择7000汉字字符集.txt,可能别人会推荐采集游戏文本汉字并去重得到专有的字符集txt文件,但那太麻烦了,用我这方法就好了

网址 https://github.com/wy-luke/Unity-TextMeshPro-Chinese-Characters-Set

(9) 将上面的 simkai.ttf 和 7000汉字字符集.txt 粘贴到项目的assets目录下

(10) 依次点击 Window -> TextMeshPro -> Font Asset Creator,将simkai.ttf拖动到Source Font File,将7000汉字字符集拖动到Character File,其他设置如下,然后点击Generate Font Atalas

(11) 当出现如下界面时,才算完成了第一步准备工作,点击Save,将生成的simkai SDF.asset保存到默认路径下,其实就是当前的assets路径

(12) 将刚生成的simkai SDF.asset拖到右边文本对象的Font Asset中,奇迹发生了!"□□"全都转汉字正确显示了出来

(13) 依次点击 File -> Build And Run,将项目打包为游戏放在自定义的文件夹中,并运行刚才新建的游戏,文本果然成功显示了!

(14) 用AssetBundleExtractorAvalonia(下面简称为ABEA),打开上一步保存的游戏文件路径下的sharedassets0.assets,推荐使用ABEA,而不是AssetBundleExtractor,另外绝对不能图省事,将sharedassets0.assets复制粘贴到别的专门用于操作的目录下面,它的位置不能动!不然后面使用ABEA时,绝对会发生报错“MonoBehaviour template info failed to load.MonoBehaviour assets will not be fully deserialized.”!特地将这长串的报错文写在此处,目的就是后来人搜索报错时,可以找到这篇文章,然后立马知道问题在哪,我告诉你们吧,问题根源是,这是ABEA这款软件的一个BUG!呜呜呜~说多了都是泪

网址 https://github.com/nesrak1/UABEA/releases

(15) 这里建议在桌面或什么位置新建两个文件夹,一个叫old,一个叫new。按住ctrl键,将上一步打开的assets里的3个名字包含 simkai SDF的文件同时选中,其实是选中了所有名字里包含SDF的文件,然后依次点击Export Dump,选择new文件夹,选择UABEA json dump -> OK,提取出了3份待修改的.json文件

(16) 依葫芦画瓢,将游戏ChromeWolf的sharedassets0.assets也用ABEA进行提取,在old目录下得到了3个名字包含SDF的.json文件,同样要注意sharedassets0.assets位置不能动!

(17) 接下来是old文件夹下的json不动,对照着修改new文件夹下的3个json文件。具体做法如下,我推荐使用beyondCompare,在这步至关重要的操作中简直神器。因为json文件名字对最终结果没有影响,所以依次复制old目录下每个文件的名字全称,再粘贴为new目录下的对应的同属性的文件名,这样同名文件就方便用beyondCompare进行对比了。改名完成后,beyondCompare选择“文件夹比较”,比较new目录和old目录

(18) 名字带atlas的json最简单,将左边new目录下的atlas.json的第一个m_Name改得和右边old目录下的一样就好了,我改了1处

(19) 接着比对名字带material的json文件,挨个点击最左边的红线处,凡是遇到m_Name或者PathID不同的,左边的new就改为和右边old一样的,我改了4处

(20) 最后比较那个最大的json文件,依次搜索Name 、PathID、hashCode、GUID这4个关键字,每搜到一个新位置就比较一次,也是很快改完了,我改了。。emm记不得了,好多,反正超过10个了

(21)接着再次用ABEA打开游戏ChromeWolf目录下的sharedassets0.assets,左上角点一下Name,将文件按首字母顺序进行排序,这样需要的3个名字带SDF的文件就能挨着站一起,方便修改了。接着依次点击每个SDF,选择右边的Import Dump,

将好不容易改好的,new目录下的对应json,挨个导入进去,改完的文件后面会多个“*”的标志,最后右上角点击File -> Save。

(22)值得注意的是,我发现new目录下的,上面图片里那个名字最短,也是size最大的json文件,最后一个GUID切记不要更改,改了反而会报错,暂时不清楚原因,冰介大佬的视频里也没改这个,但也没解释为什么

(23)现在还剩最后一步了,先用ABEA打开unity自己创建的模板游戏目录下的sharedassets0.assets,选中SDF Atlas那个文件,依次点击Plugins -> Export texture -> ok,将生成的PNG图片保存在new目录下,然后再用ABEA打开游戏ChromeWolf目录下的sharedassets0.assets,选中SDF Atlas那个文件,依次点击Plugins -> Edit texture -> ok -> load -> Save,即读取并保存自己创建的Texture2D图片,然后点击左上角的File -> Save。至此,终于大功告成!

(24) 激动的心,颤抖的手,双击ChromeWolf.exe,游戏成功启动了!终于再也不是 “未响应”了~鬼知道我失败了多少次,才走到这一步(灬ꈍ ꈍ灬)

4、补充

(1) 首先要感谢up主 Icetric冰介​ 和 unity大佬群友 wsnzz2,从俩那学到了很多

(2) 其次感谢18Touch汉化组,大量的汉化文件是直接提取自钢铁孤狼的安卓破解汉化版本

(3)Chrome Wolf,或许该直译为铬合金之狼,2014年由日本厂商KEMCO发布,现已登录全平台,例如steam上正版就卖58元,但PC版只有日文和英文。想了解更多关于原版游戏的,参照官网 https://www.kemco.jp/sp/games/cw/en/index.html

(4)目前汉化已经几乎完成,后续准备在汉化的基础上,稍作修改,例如原版乘坐战车时,战后无法获取经验,这点会改掉,例如金钱和技能点也会适当提高。游戏最终会在Q群965222174发布,暂定名合金之狼,且完全免费不加密