时之书吧 关注:4,686贴子:18,054

【技术向】游戏本体字体替换与文本替换

只看楼主收藏回复

成果镇楼

经过我2天的研究,终于把游戏本体字体换了,并且可以随意更改游戏内文本信息(比如改成中文),意义在于以后大伙可以自己搞汉化了,不需要机翻,也没有口口


IP属地:四川1楼2023-08-30 19:11回复
    先说怎么替换文本,这个非常简单
    \Book of Hours\bh_Data\StreamingAssets\bhcontent\core
    找到你的游戏目录,然后一步一步找到这个叫做core的文件夹,里面都是游戏中涉及到的文本,AK还贴心的给我标注了,“烈建议你抵制阅读原始内容的诱惑,至少在你完成游戏之前”。
    以里面的子文件夹cultures为例,这个文件夹大概含义是用来存放不同语言的,但是惊奇的是,里面只有英语(en)一个文件夹,不难发现,里面是一个json格式的文件,使用记事本打开,就可以进行修改了。

    里面所有文本的格式都是 "关键词":“实际文本” 这种格式
    其中关键词就是游戏程序在运行时检测的,这个不能改,改完游戏就崩溃
    要改的是实际文本的部分,你在这里改成什么都无所谓,在游戏中原来显示这些文本的地方就会显示你改后的,因此你可以把这里改成对应的中文,来做汉化。
    当然AK是不会让你这么舒服的解决问题的,你如果直接改,进去就会是一堆口口
    另外我个人大概看了一下,里面的文本应该大部分都是初始界面相关的内容,以及UI的交互,游戏内其他文本在其他文件夹里,大伙有兴趣可以研究一下


    IP属地:四川2楼2023-08-30 19:19
    回复
      广告
      立即查看
      接下来讲游戏的字体怎么替换,这里要提到3个工具,分别是:
      1.AssetStudio
      2.UABE 或 UABEA(我用的后者,感觉页面看起来更舒服一些)
      3.Unity 版本2022.2.18f1 (注意,不能用f1c1版本,可能会报错,f1c1是unity中国特供版,f1则是国际版)


      IP属地:四川3楼2023-08-30 19:22
      回复
        第一步我们先用AssetStudio来检测这个游戏的字体文件在哪,以及以什么形式出现
        首先我们要知道游戏的数据都放在哪,那就是bh_Data这个文件夹

        该文件夹里面其中所有格式为.assets的文件都是放素材的,而其子文件夹Managed里面是放代码的
        我们现在的目的是改字体,肯定要去改assets文件,如果你想做其他mod,那么可以去看看Managed,不过这就不在本帖子的讨论范围了。
        不难看出,这个游戏里面资源还不少,各种音频、图片、素材,因此我们想找一个字体文件可谓大海捞针,而AssetStudio就是用来帮我们找文件的。
        在AssetStudio里,点击左上角的File,并选择Load folder,然后选择路径是bh_Data这个文件夹,这样这个文件夹里所有的资源文件都会被检查。

        另外一个要注意点的是游戏的版本,2022.2.18f1,这个一会要用到
        在软件里选择Asset List(资源列表)页面,并在上面的搜索条输入SDF

        可以看到出现了若干个文件,Texture和MonoBehaviour格式可以互相对应,2个为一组是同一个字体,我们一会要改的也是同一个字体对应的2个文件。前者Texture负责存储字体的字形,而后者MonoBehaviour负责与游戏程序相沟通,告诉程序每个文字对应的字形应该在图片的哪个位置上。
        我们可以随意点击几个字体右键,并点选选项Show original file(查看源文件)来查看这个字体在哪个文件里。以下方的TITLE_EBG字体为例,我推测这个字体应该是游戏开始界面的字体(事实上也确实如此),查找后看到这个字体在sharedassets0.assets里,先不关这个软件,后面还要用到。


        IP属地:四川4楼2023-08-30 19:42
        回复
          另外要补充一下,我之前为什么要查关键词SDF,因为unity里有三种可能的字体形式,分别是ttf,tmp和ngui,最后一种遇到的很少先不考虑。
          一般来说大家用的都是ttf或tmp字体,其中如果使用了tmp字体,那么unity的资源文件里会有许多叫SDF的文件(除非制作者自己改文件名,但是AK肯定懒得改),反之则是用的ttf。


          IP属地:四川5楼2023-08-30 19:53
          回复
            赶上直播了蹲一下


            IP属地:海南来自Android客户端6楼2023-08-30 19:57
            收起回复
              接下来要用到软件UABE 或 UABEA,我这里用的UABEA,虽然缺点很多,但操作简便
              依然是点选左上角的File,并点选open,选择我们刚刚找到的sharedassets0.assets文件。打开后出来的文件很多,但我们只关心字体文件。


              一个是最左侧有图片标记的,PathID是111的文件,另外一个是最左侧有浅绿色标记的,PathID是750的。这个PathID在AssetStudio里能看到,要不然文件太多你找文件会非常折磨,这也是为什么我说先不要关那个软件。
              我们先点选ID是750的这个文件,在右侧选项里选择Export Dump,然后选择一个你喜欢的路径去保存txt文件,而另外一个图片我们只需要记住他的位置,改动的问题一会再来


              IP属地:四川7楼2023-08-30 19:58
              回复
                接下来就要用到Unity了,请先确保你下载的Unity编辑器版本是2022.2.18f1,至于为什么是这个版本我之前提到过,使用AssetStudio这个软件的时候会自动显示对应游戏的Unity版本,而时之书就是这个版本的,因此我们也要用这个版本来制作对应的unity tmp字体文件。

                国内下不到这个版本,需要用魔法看unity的国际官网来下。(据说国内版本f1c1也不是不行,但是我谨慎起见还是用的国外版本,好在文件不大,只有6M,打开后会自己下载完其他文件,这个阶段不需要魔法)
                顺便吐槽一下,这个版本是去年三月初才发布的版本,我是没想到AK去年三月才开始做时之书这个项目。
                安装成果后新建一个3D项目,在Hierarchy(层级)里新建一个3D Object(3D对象)里面的Text-TextMeshPro,这样会出来一个让你加载TMP的选项,选择第一个,unity会自动安装tmp相关组件,等安装好后不用点第二个选项直接关闭选项页面。
                之后点击最上方的Window(窗口)之TextMeshPro之Font Asset Creator,会出来一个制作TMP字体的选项。
                选一个你喜欢的字体文件(ttf)拖入进unity项目,再新建一个txt文件,把你觉得可能用得到的文字(中英文数字符号等)都写进去并保存,也拖进unity项目。

                然后第一个槽位拖入你的字体文件,Atlas Resolution我个人建议选择8192*8192,Character Set选择Characters from File,这样下面会多出来一个槽位,把你的那个txt文件拖进去,下面的Get Keming Pairs勾选,然后点击Generate Font Atlas后等一会。

                等到这个阶段后点选Save并保存到默认位置就好。


                IP属地:四川8楼2023-08-30 20:16
                回复
                  广告
                  立即查看
                  关掉TMP相关的内容,然后点击Unity左上角的File,点选里面的Build Settings,之后点击右下角的Build,会让你把项目生成到一个地方,我推荐在默认的位置新建一个文件夹,名字就叫Build,然后选择生成到Build这个文件夹内。
                  之后再用UABEA这个软件,打开你的Build文件夹里的sharedassets0.assets文件,这回因为文件没多少就可以不用AssetStudio,跟字体相关的图片和脚本应该特别少,一眼就能看到,那个MonoBehaviour脚本用之前提到过的相同办法导出,而图片则点选右侧的Plugins,里面第一个选项Export texture,选择一个你喜欢的位置保存即可。
                  这时你应该得到了2个txt文件和一张图片文件,其中txt文件里一个来自时之书这个游戏,而另外一个txt以及这张图片则来源于你刚刚的Build文件。
                  同时打开这2个txt文件,如果前面的操作都做对了,你会发现这两个txt文件格式非常相似。你找到txt文件的第24行,应该是 1 string m_StyleName,把【游戏原始文件】里的【包括在这一行】在内的前24行所有文字复制,然后把【你自己的Build】里的前24行删掉,换成你刚刚复制好的24行来自源游戏的文本。
                  然后你搜索关键词“GUID”,从第25行开始搜索,你会在大概文档快结尾处发现出现了 1 string sourceFontFileGUID的字样,仅仅用【游戏原始文件】里的【这一行】去替换【你自己的Build】里的对应内容,即只需要修改引号里的内容。
                  改完后保存【你自己的Build】的txt,记得确认好别改错文件。


                  IP属地:四川9楼2023-08-30 20:27
                  收起回复
                    然后把【时之书】的sharedassets0.assets复制一份到合适的位置作为备份防止游戏崩溃,再回到UABEA,并打开【时之书】的sharedassets0.assets,我希望你还记得之前找的那2个文件在哪。
                    对于图片,点开Plugins,这次选择第二个选项Edit texture,点选下面的Load,然后选择你之前导出的那张全是文字的图片,并选择save。
                    对于脚本,选择Import Dump,然后选择刚刚修改好的txt,都改好后,按快捷键ctrl+S,或者点选左上角的File,然后点击save。
                    这样就成功把字体改成你想要的了,快进游戏看看是不是还是口口!


                    IP属地:四川10楼2023-08-30 20:31
                    收起回复
                      上面提到三个需要用到的工具,大概率要用魔法下载,不是很方便,所以有需要直接进马罗的群然后找我吧


                      IP属地:四川11楼2023-08-30 20:34
                      回复
                        群里来的,虽然看不懂但是顶一下


                        IP属地:江苏来自Android客户端12楼2023-08-30 20:36
                        回复
                          另外额外吐槽一下,制作tmp字体需要ttf字体作为素材,但是制作完之后就可以删除了。
                          我在时之书里总共发现了37个ttf字体,但是只有14个SMP字体,说明:
                          懒狗AK制作完字体后根本没删除,而且他还尝试了多种字体,只不过很多都废弃了,废弃的也没删,故意占用玩家的电脑空间


                          IP属地:四川13楼2023-08-30 20:38
                          收起回复
                            强强强


                            IP属地:天津来自Android客户端14楼2023-08-30 20:41
                            回复
                              广告
                              立即查看
                              谢谢大佬
                              插眼明天实验一下


                              IP属地:湖南来自Android客户端15楼2023-08-30 21:27
                              回复