首页
社区
课程
招聘
[原创]unity引擎游戏汉化步骤详解
发表于: 2014-8-19 11:34 45436

[原创]unity引擎游戏汉化步骤详解

2014-8-19 11:34
45436

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 4
支持
分享
最新回复 (12)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
顶 楼主说的好啊
2014-8-19 11:50
0
雪    币: 10962
活跃值: (2925)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
3
楼主说的好啊
2014-8-19 13:28
0
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感谢楼主分享,很有意思
2014-8-19 13:43
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享
2014-8-25 11:47
0
雪    币: 194
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错学习了。。。
2015-3-24 17:31
0
雪    币: 6
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主说得对
2015-4-3 17:21
0
雪    币: 6
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我想问一下,假如我提取出图片文本等资源并修改之后,再使用unity3d的生成工具将其打包回去是不是可行
2015-5-6 18:02
0
雪    币: 3407
活跃值: (1242)
能力值: ( LV13,RANK:335 )
在线值:
发帖
回帖
粉丝
9
是的,可行
2015-5-7 10:23
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我想汉化很喜欢的一个游戏,游戏是用unity3D做的,我的电脑装jdk1.7不成功,一直都是用的eclipse,找了很久看到这个帖子,但是我不知道怎么用前辈给的包来反编译,希望前辈能教下我,谢谢了
2016-3-3 20:22
0
雪    币: 175
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
顶一顶,18年了,还是没有找到什么关于unity的汉化资料
2018-12-18 18:25
0
雪    币: 1197
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢,我来试试理论
2019-3-15 12:26
0
雪    币: 0
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
现在用Unity做的游戏好多..最近想自己折腾汉化...看到教程前来取经
最后于 2019-8-7 12:23 被路洪编辑 ,原因:
2019-8-7 12:22
0
游客
登录 | 注册 方可回帖
返回
//