在 Unity 2018 中充分利用 TextMesh Pro

无论您是在制作 FPS、益智游戏还是 VR 体验,您必须注意的一个方面就是用户界面。幸运的是,从 2017 年 3 月起,TextMesh Pro 加入了 Unity 大家庭。这意味着在 Unity 中制作出色的用户界面变得更加简单快捷!
对于那些没有关注这些进展的人来说,TextMesh Pro 是 Unity 默认文本组件的替代品。它具有同样的性能(在某些情况下甚至更高),而且使用了一种完全不同的渲染技术,称为 "有符号距离场"(SDF),该技术最初由 Valve 在《团队要塞 2》中使用。除了不费吹灰之力就能让文字美轮美奂之外,TextMesh Pro 还能通过检查器或脚本对文字进行更高级的控制。在本篇文章中,我们将介绍如何充分利用这一令人难以置信的工具!
使用 TextMesh Pro 启动项目有两个主要原因。首先是视觉效果的改善。有了 SDF 渲染技术,无需重新创建字体,就能轻松改变文字的外观。每个 TextMesh Pro 组件都附有一个材质,您可以对其进行调整,以修改文字的样式。第二,更好地控制。TextMesh Pro 组件包含普通文本组件中的所有变量,还有更多。如果这还不够,那么只要知道目前全球有超过 25 万开发人员在使用 TextMesh Pro 就够了!
在使用 Unity 默认文本时,您可能已经注意到,有时拉伸或调整对象大小会导致其看起来模糊不清。这是因为文本不包含调整大小后的外观信息,因此 Unity 必须 "随机应变",尝试即时生成缺失的像素。由于 TextMesh Pro 采用了不同的渲染技术,这不再是一个问题。SDF 的原理是以高分辨率渲染字体图集,从而使字体始终掌握字符在调整大小后的外观信息。

通过 TextMesh Pro,您可以导入任何字体文件并创建自己的字体资产(窗口 > TextMesh Pro > 字体资产创建器)。这样,您就可以为字体 Atlas 选择分辨率(这将决定 SDF 渲染文本的效果)。显然,您选择的分辨率越低,生成字体图集的速度就越快。

由于字体拥有在不同尺寸下的外观信息,因此还可以从字体图集中重建其轮廓和阴影。只需调整材质属性,就能完全改变文字的外观!
正如我们所看到的,TextMesh Pro 可提供美观的文本。但是,如果你无法控制文字,那么再好的文字又有什么意义呢?TextMesh Pro 组件有多个选项,可让您自定义字体大小、间距、对齐方式、字间距,或启用自动调整大小功能,并将文本放入容器中。尤其是后两种功能,可以让你在使用不同平台或不同语言时进行很好的控制,因为它们可以根据给定的文本容器自动调整文本大小,而无需编写任何脚本。不过,如果您确实希望在运行时更改这些设置,可以通过TextMeshPro API 访问TextMesh Pro 组件中的所有变量。
为了获得额外的自定义功能,您还可以在文本对象中添加文本信息调试工具组件,这样就可以直观地显示字符、单词、链接、行等。

如果您想节省每次插入页眉、标题、引文等时重新设置文本格式的时间,您可以为任何特定目的设置样式表。其中一个例子是为页眉注入一个装饰。要创建样式表,请选择创建 > TextMesh Pro > 样式表。您可以在"编辑">"项目设置">"TextMesh Pro 设置"中将此新资产设置为默认样式表。

除了通过检查器或脚本控制文本的外观外,还可以通过文本字段本身进行控制。如果你熟悉 HTML 或 XML,就可以在输入时自定义文本的外观。如果您不知道,只需阅读如何使用 TextMesh Pro 使用富文本的指南即可入门!当您想在同一个文本对象中使用多种样式、尺寸和材质时,这一点尤其有用。

让 TextMesh Pro 看起来更漂亮的另一种方法是为文字应用表面着色器。这将使场景中的光线影响文字。在下面的示例中,一些实时点光源在场景中移动并影响文字。

材质属性可让你选择自定义设置,例如面、轮廓、斜面、照明、凹凸图、环境图、光晕和调试设置。
一旦创建了满意的材质,就可以创建一个材质预设,我们可以在任何时候重复使用,特别是针对我们正在使用的字体资产。我们可以右键单击材质名称,然后选择 "创建材质预设"。这将创建一个资产,我们可以从TextMesh Pro 组件 > 字体设置 > 材质预设中选择该资产。
如果您生成的字体图集缺少某些字符,TextMesh Pro 将使输入的字符返回到默认字形。您可以通过 "编辑">"项目设置">"TextMesh Pro 设置 "更改该字形。或者,您也可以设置一个或多个字体资产,如果在主图集中找不到字符,TextMesh Pro 将返回到这些字体资产。出于优化目的,将主字体图集保持在较高分辨率,而将所有后备图集保持在较低分辨率是合理的。
除此之外,您还可以使用 TextMesh Pro 设置为字体和材质或精灵资产设置资源路径。使用富文本时,您可以根据在 "设置 "中定义的主要 "雪碧资产 "中可用的雪碧插入雪碧。最简单的方法是导入 Sprite Sheet,然后在 Sprite Editor 中对其进行切片,右键单击资产并选择创建 > TextMesh Pro > Sprite Asset。在这个新资产中,您可以自定义偏移或枢轴等设置。同样,您也可以设置一系列后备雪碧资产,以便在主要雪碧资产中找不到雪碧时备用。

在性能方面,正如我们已经提到的,TextMesh Pro 的工作方式与默认文本类似:它仍然在四边形上渲染,因此与使用位图字体一样高效。运行时也不分配内存:TextMesh Pro 只会在您按下播放键时为文本对象分配空间。如果要大幅增加字符数,则只需重新分配一次;如果要减少字符数,则无需重新分配,除非至少减少 256 个字符。在改进方面,由于 TextMesh Pro 采用了 SDF 渲染技术,因此您可以在轮廓和阴影等样式方面获得更好的效果。
当您将 TextMesh Pro 导入项目时(从 Unity 2018.1 起,从窗口 > 包管理器 > TextMesh Pro > 安装),本博客中提到的大部分内容都可以作为示例场景使用。我强烈建议您在开始使用 TextMesh Pro 之前先看看这些内容,因为它们的内容可能会回答您的大部分问题。不过,如果您想提供反馈意见或仍有任何问题,欢迎您通过论坛提出。
