-
-
[原创]unity引擎游戏汉化步骤详解
-
发表于:
2014-8-19 11:34
45965
-
unity引擎做的大型网络游戏越来越多,引入到国内,汉化也成了一个重要的需求。本文用《使命召唤》为例讲解
obb下载地址:1ecK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4C8g2s2A6r3h3W2g2K9
apk下载地址:d81K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4G2y4U0u0J5d9h3W2W2
安装方法请在网上搜索,不再赘述。
1. apk对obb的校验
如果出现闪退,其原因是apk和obb不配套。不配套的意思是apk在加载obb的时候会对obb做一个校验,并且将算出来的校验值放在apk压缩包a.apk\assets\bin\Data\settings.xml中的
<bool name="597b0f95be55e09c1a6214f68d189683">True</bool> 字段,使用
工具:cc3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4U0x3s2x3J5d9Y4u0S2i4K6t1$3L8X3u0K6M7q4)9K6b7W2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4c8f1k6Q4b7V1y4Q4z5o6S2Q4c8e0W2Q4z5f1y4Q4z5o6m8Q4c8e0S2Q4b7e0k6Q4z5o6q4B7j5i4k6S2f1@1c8w2x3g2)9J5k6e0N6Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1$3i4@1u0m8i4K6V1H3i4@1f1%4i4@1p5H3i4K6R3I4i4@1f1#2i4K6V1J5i4K6S2o6i4@1f1#2i4@1q4p5i4K6V1%4i4@1f1^5i4K6S2m8i4K6R3J5i4@1f1%4i4@1p5H3i4K6R3I4i4@1g2r3i4@1u0o6i4K6R3&6
用obb路径作为参数计算出校验值,放入apk中,重新签名,就可以使用了。这时使用的英文版obb,接下来我们需要将它汉化。
2.汉化资源
首先我们得知道我们最关心的游戏文本,包括对话,提示,按钮文字都放在obb里面,obb其实一个压缩包,用解压软件打开,里面有很多文本,使用国外开源项目disunity(使用方法请自行搜索)可以将资源文件解压出来。disunity作者在网上提供的源码不能够直接编译,笔者整理了一个可以在eclipse调试运行的版本
下载地址:884K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4K6K9Y4j5H3j5h3u0T1
感谢disunity作者的辛勤工作,unity资源文件有它固有的格式,且unity不是开源引擎,研究摸索它的格式需要超乎常人的耐心和毅力,具体文件格式不再赘述,请参看提供的disunity可以调试代码用加压出来的obb资源文件一边调试,一边掌握学习。主要的数据结构处理的类为:
AssetHeader TypeTree ObjectPathTable AssetRefTable
学习完unity资源文件格式以后,我们需要修改它的文字,改成中文,那就需要将解压出来的资源,修改以后,再打包回去。很可惜disunity作者没有提供的这样的功能。
怎么办???
DIY吧。
我们将学习到的unity资源文件格式(它是一种递归的定义)自我解析成目录和文件的形式(目录和文件也是一种递归结构),文件为基本类型,目录为可以递归的复合类型。这样我们把资源文件的内容以文件的形式存放好了,将需要修改的文字信息修改,然后按照unity资源文件格式打包回去,替换到obb里面对应的文件,通过工具的计算修改apk里面的校验码。应该就可以使用了。
但是,图片显示的是空白? 为什么??
3. 制作FONT
原来unity使用了字体文件,它也是一个unity资源文件,是一张图片(附件AgencyFB_24pt.rar)它是一个tga格式的图片,使用2345图片查看器可以打开。还有一个文本指示文字的坐标,宽高等信息,当需要显示“A”的时候,unity会根据这个txt文本截取图片的一小块显示到对应的位置,这样就就可以看见字了。我们需要汉化,需要加入汉字,但是这张图片上没有我们需要的信息,于是我们需要用到一个工具BMFONT
下载地址:1a6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4E0k6$3#2Y4e0h3I4y4i4K6t1$3L8X3u0K6M7q4)9K6b7W2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1#2i4@1q4q4i4K6R3K6i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1@1i4@1u0p5i4@1u0r3i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1$3i4K6V1$3i4@1t1&6i4@1f1$3i4@1t1K6i4K6V1#2i4@1f1#2i4K6S2r3i4@1q4r3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1%4i4@1u0p5i4K6V1I4i4@1f1@1i4@1t1^5i4K6S2m8i4@1f1$3i4K6V1H3i4K6W2o6i4@1f1%4i4@1t1@1i4@1p5J5i4@1f1K6i4K6R3H3i4K6R3J5
可以将我们自己的汉化文本放入软件生成图片和txt坐标信息文件。需要注意的是,图片请选择tga格式。
4. 将tga和txt放入unity资源文件
找到obb中对应的FONT资源文件,用2中的方法解压成目录和文件的形式,取出tga图片的像素信息替换掉文件中的像素信息,测试中发现依然显示为空白,后来经过研究发现原因是BMFONT生成的图片和unity资源文件的图片是上下颠倒过的,(虽然用2345查看器都显示的一样,原因是BMFONT生成图片第18个字节为2,disunity加压出来为1), 所以BMFONT的像素点需要上下颠倒一下,然后替换掉。去掉头部信息,只保留像素信息,需要注意的是,通过2中解析出来的字段里面有诸如图片大小,图片长度,图片宽度等信息,请参考disunity源码,相应更改这些信息,注意文件存储大小端,千丝万缕,错一丁点儿都可能不会成功。
将txt中的字体信息修改为解压出来的字体信息,否则将错误,比如系统的是AgencyFB_24pt ,我们自己做的是微软雅黑,那么将微软雅黑改成AgencyFB_24pt,将txt替换掉。
替换掉obb里面的文件,修改apk的校验码,安装apk,当当当当,终于汉化成功了!!!!

结束语:
国内有很多汉化组织,可是汉化资料却非常少。时间和写作有限,许多技术细节没有聊到,只写了一个大致的方向和步骤,也可能会存在一些错误,欢迎指正,联系方式:646535763@qq.com
[培训]科锐逆向工程师培训第53期2025年7月8日开班!