unity引擎做的大型网络游戏越来越多,引入到国内,汉化也成了一个重要的需求。本文用《使命召唤》为例讲解 obb下载地址:http://pan.baidu.com/s/1kTzFZUZ apk下载地址:http://pan.baidu.com/s/1o62rIie 安装方法请在网上搜索,不再赘述。 1. apk对obb的校验 如果出现闪退,其原因是apk和obb不配套。不配套的意思是apk在加载obb的时候会对obb做一个校验,并且将算出来的校验值放在apk压缩包a.apk\assets\bin\Data\settings.xml中的 <bool name="597b0f95be55e09c1a6214f68d189683">True</bool> 字段,使用 工具:http://pan.baidu.com/s/1c0s2Jra (需要javaSDK1.7 源码和字节码) 用obb路径作为参数计算出校验值,放入apk中,重新签名,就可以使用了。这时使用的英文版obb,接下来我们需要将它汉化。 2.汉化资源 首先我们得知道我们最关心的游戏文本,包括对话,提示,按钮文字都放在obb里面,obb其实一个压缩包,用解压软件打开,里面有很多文本,使用国外开源项目disunity(使用方法请自行搜索)可以将资源文件解压出来。disunity作者在网上提供的源码不能够直接编译,笔者整理了一个可以在eclipse调试运行的版本 下载地址:http://pan.baidu.com/s/1sjv0abb 感谢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 下载地址:http://pan.baidu.com/s/1mgmgMlM 它的使用方法可以在网上搜索。 可以将我们自己的汉化文本放入软件生成图片和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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!