总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html


目录

一、分析

二、思路

三、具体实践

四、总结

Unity版本:2018.4.5f1

工具:UABE(地址:https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor

一、分析

  在Unity中,可以看到一个TTF文件在导入后,可以展开成下面这样

也就是一个大哥带两个小弟,合理猜测在这个“大哥”的二进制块中会包含指向两个“小弟”的指针

二、思路

  首先实验只替换“大哥”,同时要保持两个指向小弟的指针不变,如果可以正常显示就结束,如果不行就把两个“小弟”在一起替换

三、具体实践

【1】Demo

  用Unity导出两个Demo,内容上都只有一个Text,但用了不同的字体,目标是把仿宋Demo的字体改成楷体

【2】用UABE导出

  在UABE里可以直接看到字体名字的FONT类型资源,先试着DUMP出文本,仿宋的文本DUMP出来之后非常大,足足有300M,用VS Code打开(用记事本肯定打不开的),可以看到内容如下

  显然两个指针是要保留的,但是其他数据不用动,如果继续用文本,感觉实在太慢了,所以转而用RAW。于是分别DUMP出仿宋Demo和楷体Demo的字体,得到两个dat格式的文件。

【3】对二进制文件的处理

  对楷体的dat文件进行处理,替换那两个指针,换成和仿宋的dat一样

  根据DUMP文本,首先是字体名字,一个变长的String,然后一个32位数,随后是第一个指针,然后再一个32位数,第二个指针,只需要把楷体的这两个指针改掉即可

【4】写回楷体Demo

  用UABE打开仿宋Demo的资源文件,Import Raw,选择修改后的楷体dat文件,写回,重新打包

【5】结果

  仿宋Demo的字体被成功替换成楷体

四、总结

  完整的操作过程是:

  ① 分别得到新字体.dat,旧字体.dat

  ② 把新字体.dat的两个指针改成和旧字体.dat一致

  ③ 把新字体.dat写入旧字体的资源文件里去,代替旧字体

  麻烦的点:新字体需要专门去建一个Unity工程并编译来得到二进制描述,而且版本要相近,本文demo中的指针是一个32位数表示文件、一个64位数表示对象,但是我记得某个版本有变化,所以最好版本相近甚至相同。

Unity手游汉化笔记②:使用UABE替换TTF字体的更多相关文章

  1. Unity手游汉化笔记③:UABE替换BMFont

    总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一.Demo 二.分析思路 三.替换 四.总结 五.补充 工具: Unity版本:20 ...

  2. Unity手游汉化笔记①:UABE+AssetStudio编辑MonoBehavior类型Asset

    总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一.使用工具 二.具体操作 [1]利用AssetStudio进行预览 [2]UABE修 ...

  3. 知物由学|游戏开发者如何从容应对Unity手游风险?

    本文由  网易云发布. "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不 ...

  4. Unity手游引擎安全解析及实践

    近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...

  5. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  6. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...

  7. Unity手游之路<八>自动寻路Navmesh之入门

    http://blog.csdn.net/janeky/article/details/17457533 在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能会 ...

  8. Unity手游之路<十三>手游代码更新策略探讨

    http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...

  9. unity手游之聊天SDK集成与使用一

    手游中都有聊天功能,比如公会,私聊,世界聊天,那么找一个好用,功能强大的SDK的可以节省很多精力,帮助我们提高开发速度与游戏质量. 写本篇博文是为了方便使用这个SDK做聊天模块的程序,避免许多坑,我在 ...

随机推荐

  1. university-conda

    1.建立环境 conda create -n djx python=3.7 2.激活 conda activate djx 3.退出 conda deactivate 4.查看 conda env l ...

  2. 微信小程序之简单记账本开发记录(七)

    记账本已经可以实现添加和删除的功能 现在只需要将上述步骤重复一遍便可将另一个界面做出来. 大体上已制作完成,如果在细节上有变动会在这一篇更新 总体来说,这个作业让我对微信小程序的开发有了更多地认识,大 ...

  3. 51Nod1353 树

    51Nod1353 树 传送门 思路 我们定义\(dp[i][j]\)代表第i个点联通块大小为j的方案总数,也可以把它理解为等待分配(不确定归属)的联通块大小为j的方案总数. 那么每次转移我们就使用一 ...

  4. IOCP另一种实现

    参考 https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-bindiocompletioncallback ht ...

  5. Scala 在挖财的应用实践

    编者按:本文是根据ArchSummit 大会上挖财资深架构师王宏江的演讲<Scala 在挖财的应用实践>整理而成. 这次分享有三个方面,一是介绍一下挖财当前的开发情况和后端的架构, 二是挖 ...

  6. Configuration类的@Value属性值为null

    今天写的Configuration类的@Value属性值为null @Configuration public class MybatisConfigurer { @Value("${spr ...

  7. PostgreSQL的pg_hba.conf文件讲解

    pg_hba.conf为PostgreSQL的访问策略配置文件,默认位于/var/lib/pgsql/10/data/目录(PostgreSQL10). 该配置文件有5个参数,分别为:TYPE(主机类 ...

  8. 微信小程序之判断页面来源

    1. 对非首页,使用 getCurrentPages 函数获取当前页面栈 onLoad: function (options) { let pages = getCurrentPages() if ( ...

  9. Linux下常用目录有哪些?分别有什么作用?

    /boot:这个目录是用来存放与系统启动相关的文件 /root:root用户的家目录 /bin:存放大部分的二进制的可执行文件,也就是大部分的linux命令. /tmp:这个文件目录一般是公共的,也就 ...

  10. selenium又一小坑 无法用XPATH直接获取属性值 需要使用.get_attribute(“href”)

    在使用selenium进行抓取url的时候,试图使用find_elements_by_xpath来获取. 因此想当然的直接使用XPATH的语法进行获取属性 事例缩略后xml结构如下 <div c ...