字体资源充当字体的容器。使用字体资源,您可以将字体导入到您的项目中,并从一个文件创建字体的变体,而不会更改原始字体。创建字体资源的另一个原因是为了处理具有大量字符集的语言,例如中文。您可以仅包含所需的字符,而不是完整的字符集。
您可以将 TrueType (.ttf
)、OpenType (.otf
) 或 TrueType 集合 (.ttc
) 字体转换为字体资源。字体资源包含一个字体图集纹理文件,其中包含所有字符。在创建字体资源时,您可以从几种 图集填充模式 和 渲染模式 中进行选择。
TextCore 支持 **静态**、**动态** 和 **动态操作系统** 图集填充模式。
静态字体资源在转换期间将字符预烘焙到图集纹理中。使用静态字体资源来包含项目中已知的文本,例如标签和标题。创建静态字体资源时,字体图集默认为空。您必须手动生成字体图集并包含项目所需的所有字符。项目构建不需要您包含字体源文件,因此它既快速又高效。
请参阅有关如何 创建静态字体资源 的说明。
动态字体资源从空的图集纹理开始。动态字体资源会查找源字体文件中的字符,并在您在 UI(用户界面) 允许用户与您的应用程序进行交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 中使用它们时动态添加字符。对于项目中的未知文本,例如任何 文本输入字段允许用户输入文本字符串的字段 更多信息
参见 术语表,请使用动态字体资源。动态字体资源很灵活,但它们具有额外的性能开销,因为项目构建需要包含所有源字体文件。
请参阅有关如何 创建动态字体资源 的说明。
动态操作系统字体资源是一种动态字体资源,它引用操作系统上的字体文件,而不是源字体文件。与动态字体资源相比,动态操作系统字体资源的内存开销更低。项目构建不需要包含字体源文件。确保字体位于目标平台的操作系统上。动态操作系统字体资源非常适合作为后备字体资源。
要创建动态操作系统字体资源,请将字体从操作系统导入到您的项目,并使用它来创建动态字体资源,并将 **图集填充模式** 更改为 **动态操作系统**。
TextCore 支持位图和有符号距离场 (SDF) 的图集渲染模式。
位图渲染会生成字体资源,这些资源完美地将字体的每个 像素计算机图像中的最小单位。像素大小取决于您的屏幕分辨率。像素照明在每个屏幕像素处计算。 更多信息
参见 术语表 与 场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置您的环境、障碍物和装饰,实质上是设计和构建游戏的各个部分。 更多信息
参见 术语表 和 GUI 像素对齐。对于像素艺术,请使用以下渲染模式
SDF 渲染会生成字体资源,这些资源在您变换或放大它们时看起来很清晰。SDF 渲染支持诸如 轮廓和阴影 之类的效果。
与位图字体纹理不同,SDF 字体资源包含轮廓距离信息。在字体图集中,此信息看起来像从每个字形的中间到其边缘之外点的灰度渐变。渐变的中点对应于字形的边缘。
下面的图像显示了位图和 SDF 字体资源以及它们生成的渲染文本。位图字体生成的文本边缘或多或少是参差不齐和模糊的,具体取决于文本距 相机创建场景中特定视点的图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
参见 术语表 的距离,以及它是如何变换和扭曲的。SDF 字体生成的文本具有平滑的边缘,无论距离相机多远。
对于 SDF 字体,请使用以下渲染模式
如果您只想更改字体资源的度量标准,而不是创建新的字体资源,请基于另一个字体资源创建字体资源变体。字体资源变体可以具有与原始字体资源不同的样式,而不会消耗额外的纹理空间。该变体存储自己的 面部信息、字符、字形和调整对数据,但仍然引用原始图集。
要创建字体资源变体,请右键单击字体资源,然后选择 **创建** > **文本** > **字体资源变体**。
字体纹理中的字符需要在它们之间进行填充,以便它们可以分别渲染。此填充以像素为单位指定。填充还会为 SDF 渐变腾出空间。填充越大,过渡越平滑,这使得渲染质量更高,效果也更大,例如粗轮廓。对于 512x512
纹理,请使用 5
的填充。一个好的经验法则是采样与填充比率为 1:10
。
对于大多数字体,如果您包含所有 ASCII 字符,请使用 512x512
纹理分辨率。要支持数千个字符,请使用大型纹理并在字体资源的 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表 窗口中启用 **多图集纹理**。一旦主纹理已满,这将自动创建相同大小的新纹理。
如果您为移动设备设计,也可以启用 **多图集纹理**,其中施加的最大纹理大小会阻止一整套字形适合一个具有足够质量的单个图集。
要使用字体资源,在 UI 生成器中,从检查器窗口中的 **字体资源** 中选择字体。
注意:**字体** 字段是为了向后兼容。如果您想在您的旧项目中使用 **字体** 列表中的字体,则必须从 **字体资源** 中选择 **无**。否则,您从 **字体** 中选择的字体将不会生效。
您可以使用以下语法将字体资源应用于 USS 中的文本元素
-unity-font-definition: <resource> | <url>
例如
Label {
-unity-font-definition: url("/Assets/UI Toolkit/Resources/Fonts & Materials/LiberationSans SDF.asset");
}
有关更多信息,请参阅 USS 文本属性。
总之,在创建字体资源时,请考虑以下几点
1:10
的采样与填充比率。