unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)

时间:2024-03-30 21:57:12

前言:在unity设计中,经常会遇到需要自定义字体的情况,毕竟unity自带的字体只有Arial一种,根本无法满足对字体样式的的需求,虽然unity也支持我们导入或者创建字体,并且可以在GUI Text、TextMesh中使用,但是并不一定符合我们的需要,这个时候出现了一种Custom Font自定义字体。

怎样创建位图字体

1.准备素材
由于Custom Font 是需要用户指定的一张含有特定字符的图片生成的,下面是我准备的一张素材,里面包含了一些数字以及其他特殊符号
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
注意:字符图片的选择有几个要求,
1.图片背景需要透明
2.字符需要保证一样大小(尺寸)(方便得到的字体整齐并且方便初始化配置)
3.如果没有改变字体颜色的需求的话,这条可选,但是如果有的话,字体的颜色最好为白色
上面的条件如果不满足,最好先使用ps修改一下,

正式开始制作
1.创建字体材质 右键->Create->Material
2. 修改材质的shader类型为 GUI->Text Shader
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
3.创建custom font 右键->Custom Font
4.将创建好的材质拖到字体上面
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
5.修改素材参数
5.1 修改素材texture type 为sprite(2D and UI)
5.2 将素材 Sprite Mode 修改成Multiple
5.3 使用sprite Editor 分割素材

unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)

分割素材的时候,有一些功能可以自己尝试一下,这里要说明的是,在第二章图片的右下角有一个参数表,这个表里面的参数有的时候是需要你自己调节一下的,诸如分割的位置,边缘等,当然大部分情况是直接用Automatic分割就可以满足需要了。
6. 进行字符映射 由于unity并没有那么只能,她并不能自动的在图片中找出我们想要的字符,所以需要我们来映射一下
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
图中1.是我们设置的特殊字符的数量 2.是我们需要设置的参数
下面是各个参数的作用

unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
画横线的就是Sprite_width*sprite_length 然后按照图中的公式计算即可
注意 Vert_H必须设置为实际像素的负值,这是因为Unity中图片是从左上角绘制的,所以高度实际上是向下生长。
最后 新建一个text把字体拖上去,在输入框中输入显示的数字,就完成了

unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
缺点:1.无法改变字体的大小(size)
2.无法显示中文字符
3.无法*的更改字体颜色(如果你的字体不是白色的话,他会在基础上添加颜色,也就是一种颜色混合)
关于换行问题:
其实是可以通过修改Custom Font中的 Line Spacing 一项来解决该问题。亲测有效,测试过程中有以下几点需要注意:

  1. 直接修改Custom Font中的 Line Spacing 是不会导致Text重绘的,所以在调节的时候无法观察到Text发生变化,想要查看修改效果可以直接修改文本内容通。
  2. UGUI内部Text组件是使用属性[ExecuteInEditMode]修饰的,使用该属性(attribute)会导致即使游戏未处于“播放”状态脚本也会运行,所以我们修改Text组件时,看到的内容也会实时更新。
  3. 修改 Custom Font 的 Line Spacing 后,即使修改Scale也可以得到正常的效果。除此之外,还可以通过修改Text组件上的 Line Spacing 再次调整行间距。Text 组件上 Line Spacing 的计算单位就是Custom 中指定的 Line Spacing。
  4. unity3D 使用BMFont制作清晰字体+位图字体(字符图片自定义需要的字体)
    使用BMFont制作字体
    使用BMFont制作字体