Font In Unity
使用unity的时候经常会用到较多的字体,本篇文章讲一下unity如何自定义字体以及在使用字体时的优化
如何使用Unity自定义字体
unity其实一直就有一个custom font功能,网上也能找到很多博客
然后设置相关参数
具体可以看看unity的官方文档和另一个文章
https://docs.unity3d.com/Manual/class-Font.html
http://www.manew.com/thread-110484-1-1.html
例如我们在制作数字(0-9)字体的时候就需要 一张数字图片,然后设置Character Rects
,文档中说的很清楚,Index
就是指的当前字的 ASCII码的索引(十进制),例如0=48 1=49…..
如果我们想设置更多的文字,也是可以的,因为Unity支持Unicode,但是我们需要一些步骤,将文字->16进制->十进制
这里有个在线的转换工具:http://www.ab126.com/goju/1711.html
关于编码可以查看这篇文章:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
代码
1 | string content = "你好"; |
然后我们把字体的”你”的Index设置成20320即可
这里我做了一个工具:https://github.com/ZeroUltra/Custom-Font
Unity中的字体优化
字体都包含一个材质一个贴图 我们使用的大多都是动态字体( 动态字体,如果所输入的文字在字体中找不到相应的编码,就会自动从系统默认字体中找到该字体),有个很大的问题就是,动态字体会自己调节贴图大小来更换图集,在程序运行过程中,动态赋值text文本字体,贴图没有文字默认是64*64大小,但是当文字越来越多的时候就会把贴图撑大。
我在text中输入了很多文字之后
另外,如果文字的Font Style
不同 在材质贴图中也会多加一份
也会根据字体大小
多追加一份
所以综上:我们可以拟定两个方案:
- 如果已经知道图集包含的特定字,通过裁剪文字将文字内容固定,裁剪文字将会降低内存大小 裁剪文字有很多种方法,比如
BMFont
自己制作FontSubsetGUI
裁剪文字 另外Unity 也有自带的字体裁剪,这里说明一下
导入字体库选择Custom Set,然后
我只让改字体库包含 “你好”两个字,那么在Text 文本上 将不会显示其他的文字
也会降低内存
如果想要的文字一个个输入有些麻烦 这里有个帮助类.可以快速添加需要的文字
http://1vr.cn/?p=607&cpage=1#comment-89612
字体的一些tips
- 推荐使用TextMeshPro!!!
- 使用UGUI Text RichText会让面数倍增
- 尽量不要使用UI Shadow和Outline