Unity手游汉化笔记②:使用UABE替换TTF字体
总的笔记: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字体的更多相关文章
- Unity手游汉化笔记③:UABE替换BMFont
总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一.Demo 二.分析思路 三.替换 四.总结 五.补充 工具: Unity版本:20 ...
- Unity手游汉化笔记①:UABE+AssetStudio编辑MonoBehavior类型Asset
总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一.使用工具 二.具体操作 [1]利用AssetStudio进行预览 [2]UABE修 ...
- 知物由学|游戏开发者如何从容应对Unity手游风险?
本文由 网易云发布. "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不 ...
- Unity手游引擎安全解析及实践
近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...
- Unity手游之路<七>角色控制器
Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...
- Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发
http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...
- Unity手游之路<八>自动寻路Navmesh之入门
http://blog.csdn.net/janeky/article/details/17457533 在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能会 ...
- Unity手游之路<十三>手游代码更新策略探讨
http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...
- unity手游之聊天SDK集成与使用一
手游中都有聊天功能,比如公会,私聊,世界聊天,那么找一个好用,功能强大的SDK的可以节省很多精力,帮助我们提高开发速度与游戏质量. 写本篇博文是为了方便使用这个SDK做聊天模块的程序,避免许多坑,我在 ...
随机推荐
- 31 树莓派外接Oled屏幕
http://shumeipai.nxez.com/2017/09/13/solve-the-raspberry-pi-drive-oled-problem.html
- django命名url与url反向解析
1.在urls.py路由中指定别名 2.在views.py视图文件中导入from django.shortcuts import render, redirect, reverse 3.也可从这里导入 ...
- ZROI 暑期高端峰会 A班 Day3 图论
最短路 NOI2019 D2T1 弹跳 KD 树 线段树套set -> 线段树套并查集? POI2014/2015 ??? \(n\) 个点 \(m\) 条边 DAG.求删掉每个点后 \(1\) ...
- C语言博客作业4——数组
0.展示PTA总分 一维数组 二维数组 字符数组 1.本章学习总结 1.1学习内容总结 一维数组知识点: 无论是对一维数组还是二维数组进行应用时,我们对其下标的应用十分广泛. 1:一维数组的输入和遍历 ...
- 将float数字按照一定格式写入到文件中
/* float.c */ #include<stdio.h> #include<string.h> int main() { FILE *fp = fopen("D ...
- C语言之symlink
函数原型: #include <unistd.h> int symlink(const char * oldpath, const char * newpath); 函数说明: symli ...
- PyTorch学习之六个学习率调整策略
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 有序调整:等间隔调整(Step),按需调整学习率(Mul ...
- 【BigData】Java基础_ArrayList的使用
ArrayList概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. 数组有自身的特点,不变性,一旦数组被初始化,那么其长度就固定了,不 ...
- MOT19数据集百度云盘
图片按视频分的压缩包 [已失效] 链接: https://pan.baidu.com/s/1kNw6yhvqgitNK5N__WOpxw 提取码: yia4 链接: https://pan.baidu ...
- IRQL
IRQL是Interrupt ReQuest Level,中断请求级别. 一个由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软 ...