Unity 字体

本文详细介绍了Unity3D中动态字体和静态字体的区别与使用方法,包括TTF字体的导入与设置,静态字体的制作流程,以及字体显示不全的问题解决策略。
部署运行你感兴趣的模型镜像

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文件制作

字体库剥离和精简
————————————————
版权声明:本文为优快云博主「Wei_Yuan_2012」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/wei_yuan_2012/article/details/87927582

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

### 如何在 Unity 中使用自定义字体 #### 使用 BMFont 制作自定义字体 一种常见的方法是通过第三方工具 BMFont 来生成字体文件。具体流程如下: - 首先,在 BMFont 工具中完成字体的设计工作,包括选择字体样式、大小以及其他属性[^3]。 - 接下来,点击菜单中的 `Edit` -> `(Un)Select all chars` 取消选中不必要的字符,从而减少最终导出的字体文件体积。 - 完成设计后,切换至 `Options` 菜单下的 `Save bitmap font as...` 导出 `.fnt` 对应的贴图文件(通常是 `.png` 格式)。这些文件会被导入到 Unity 项目中作为自定义字体的基础素材。 一旦上述文件准备就绪,将其拖入 Unity 的 Assets 文件夹下即可加载并应用该字体资源[^1]。 #### 不借助外部工具的方法 另一种无需依赖任何额外软件的方式则是利用 Unity 自身提供的 Sprite 图集功能来实现类似的定制化需求。这种方法的核心在于手动构建一个包含所需文字图像的纹理,并配合特定脚本解析其映射关系以供 UI 组件调用显示相应内容。 对于中文或其他复杂语言的支持,则推荐采用 TextMeshPro 插件所提供的高级特性来进行更精细的操作。例如,可以通过访问顶部栏目的 **Window** 下拉列表找到 **TextMeshPro - Font Asset Creator** 进行新字体资产初始化过程;或者直接基于现有 TTF 字体文件快速转换为目标平台兼容版本以便进一步编辑调整直至满足实际应用场景的要求为止[^2]。 此外值得注意的是,在某些情况下可能还需要考虑 ASCII 编码对应关系等问题,这有助于确保每一个字符都能被正确定位渲染出来[^4]。 ```csharp // 示例代码展示如何动态更改游戏对象上的文本及其关联字体 using UnityEngine; using TMPro; public class ChangeFontExample : MonoBehaviour { public TMP_FontAsset customFont; // 将目标字体分配给此变量 void Start() { GetComponent<TMP_Text>().font = customFont; } } ``` 以上便是有关于怎样在Unity里头运用自制字型的一些基础指导方针以及实例演示片段。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值