Unity3D中支持动态字体和静态字体两种格式字体,动态字体即使用TTF格式字体库,静态字体则需要自己打包字体图集。动态字体和静态字体区别在于,动态字体如果出现字体库中不存在的字体,会使用系统字体,而静态字体则不会,而且静态字体是图片,字体大小通过缩放来改变。Unity3D也有自带的字体,Windows下自带字体为Arial。如果使用Unity3D的自带字体Arial字体,在某些机型上可能显示不全。因为Arial是英文字体,并不包含中文字体,在程序运行过程中如果遇到字库中没有的字,程序就会从系统的默认字体库中查找对应的文字,如果系统默认的字库中也没有这个字,那么就会造成字体不显示问题。在Android系统中Unity3D默认会去查找名为DroidSansFallback的字体,因为这个字体是Android的默认字体,但是因为Android系统的可定制性,很多手机厂商会去修改默认字体。Android系统是根据字体的文件名称来找字体的,但Unity3D识别字体却是通过字体内部的设置来识别字体的,所以即使在Android手机中有DroidSansFallback.ttf字体,也有可能导致Unity3D找不到这个字体。由于上面的原因,尽量不要使用Unity3D的自带字体Arial,除非你做的游戏是纯英文的。
Unity3D的动态字体:
想要在Untiy3D中使用动态字体,只要把TTF格式字体库导入到Unity3D工程中,然后在需要使用该字体的地方设置字体类型Font为该TTF字体库即可。对于导入工程中的TTF字体库,可以在控制面板中设置一些属性,比如字体大小,渲染模式等。
其中,Font Size就是设置字体大小,数值越大,设置文字时字体对应的texture越大。Rendering Mode 设置字体的渲染模式,这个会直接影响字体在游戏中的显示清晰度,Smooth 是渲染字体纹理最快的抗锯齿模式,Hinted Smooth 通过字体像素描边的抗锯齿模式,Hinted Raster 是对于小号字体显示最清晰的无抗锯齿渲染模式,OS Default 是使用系统字体渲染模式,只能用于动态字体,因为静态字体是在打包时候生成的。Character 设置字体库的字体集,比较常用的是Dynamic,选择该项就是动态字体,只要改字体库中有的字体都能显示,另外Custom Set 选项让我们可以自定义只使用字体库中的某些字体集合,如当我们设置如下图,
那么我们就只能使用“1.2.3”三个字符,其他字符即使TTF中有也不显示。当我们设置该选项的时候,其实相当于使用了静态字体库,因为他生成了文字图集和贴图,如上图的Font Material和Font Texture,并且可以在Debug模式下看到该自定义字体图集的UV信息。
Incl.FontData 若勾选,在导出包的时候把字体添加到包中,若不勾选,则不会将该字体打包,程序运行时会从FontNames列表里检索需要的字体,如果没有,字体就不显示。Font Names 这个参数的主要作用是设置替代字体用的,当程序需要某一个字体时,首先会从当前字体查找字符,如果没有,会依次查找FontNames列表里的其它字体,直到找到或者找完为止。
Unity3D的静态字体:
Unity3D的静态字体,也称为自定义字体,它可以支持美术字体。使用Unity3D的静态字体需要先制作静态字体库,可以借助BMFont这个工具来生成字体图集和UV信息,得到png图片和fnt文件。
接下来使用Unity3D生成静态字体库。导入字体图集,勾选Alpha From Grayscal,新建材质球,材质球Shader指定为GUI/Text Shader。
接着创建Custom Font,配置字体UV信息,这个UV信息保存在fnt文件中,如果图集不大可以手动设置一下,如果很大可以通过代码来设置。如果想要在项目中使用静态字体库,则和动态字体一样,在需要使用该字体的地方设置字体类型Font为该静态字体库即可。
参考:
【Unity】UGUI 如何使用CustomFont(自定义字体)
Unity中制作自定义字体的两种方式
拓展:
常见字体格式及TTF文件制作
字体库剥离和精简
————————————————
版权声明:本文为CSDN博主「Wei_Yuan_2012」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wei_yuan_2012/article/details/87927582