Unity中实现Bitmap图片转文字
前言
在美术与程序的协作过程中,程序人员需要迅速把握问题的关键,并提出有效的解决方案。本文将详细介绍在Unity中实现Bitmap图片转文字的具体步骤。
准备工作
所需材料
- 美术提供的数字图片:这是制作字体的基础素材。
- BMFont字体制作软件:用于生成字体文件。
具体步骤
步骤1:使用BMFont导出图片字文件
使用BMFont软件导出一张仅包含数字的图片字,完成后会得到两个文件。
步骤2:修改文件后缀
将得到的fnt文件的后缀修改为txt,以便后续编辑。
步骤3:打开文件
使用带有列编辑功能的文本编辑器(如Notepad++或Sublime Text)打开修改后缀后的txt文件。文件内容示例如下:
info face="微软雅黑" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2 outline=0
common lineHeight=32 base=26 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="space2_0.png"
chars count=10
char id=48 x=0 y=0 width=15 height=21 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
char id=49 x=133 y=0 width=14 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15
char id=50 x=149 y=0 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
char id=51 x=68 y=0 width=13 height=21 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15
char id=52 x=98 y=0 width=16 height=20 xoffset=-1 yoffset=6 xadvance=15 page=0 chnl=15
char id=53 x=83 y=0 width=13 height=21 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15
char id=54 x=17 y=0 width=15 height=21 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
char id=55 x=116 y=0 width=15 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
char id=56 x=34 y=0 width=15 height=21 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
char id=57 x=51 y=0 width=15 height=21 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15
步骤4:分析文本规律
通过观察上述文本内容,可以发现其中的规律。字符的id可以通过BMFont软件获取,将鼠标移动到某个字符上,软件右下角会显示该字符的ID。例如,选择数字0时,右下角显示的Id为48。
步骤5:导入文件到Unity
在分析并修改BMFont导出文件的规律后,将这个txt文件导入到Unity中,然后使用NGUI的Font Maker工具制作图片字。
步骤6:处理字体丢失问题
当字体Prefab制作完成后,如果遇到字体丢失的情况,可以重新将字体信息txt文件拖入Unity中。
步骤7:调整字体参数
多次测试并修改字体文件的间距及宽度大小,确保最终效果与美术提供的图片一致。
测试信息
- 美术图片尺寸:260 x 31
- 字符总数:共10个字符,每个字符的间距相等(方便x递增)
以下是对应的文件内容示例:
info face="微软雅黑" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0 outline=0
common lineHeight=26 base=24 scaleW=260 scaleH=31 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="ingame_enemies_round_number.png"
chars count=10
char id=48 x=0 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=49 x=26 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=50 x=52 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=51 x=78 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=52 x=104 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=53 x=130 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=54 x=156 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=55 x=182 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=56 x=208 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
char id=57 x=234 y=0 width=26 height=31 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15
其他补充
如果美术提供的是单张图片,可以参考这篇博客获取更多处理方法。
最终效果
根据美术提供的图片,通过程序调试出字体信息文件的参数后,就可以像使用普通字体一样使用图片字体了。