需求:假设有一行文字由于界面空间不足只能显示一部分,那么剩余部分需要被截断,并且显示出来的文字末尾需要添加省略号“…”。比如“一二三四五六七八九十”,最终显示出来的样子是“一二三四…”。
这个需求在 CSS 中倒是挺好实现的。(题外话:这只限于显示出来的文字只有一行的情况。多行的情况下还是没那么容易,除非采用 WebKit 的 CSS 扩展属性 -webkit-line-clamp,不考虑兼容 W3C 标准。)但是在 Unity 中则需要摸索一下。目前已知的有两种方案。
方案一:使用 TextMesh Pro
当前的 Unity 2018 已经集成了 TextMesh Pro 插件(未确认之前的 Unity 版本是否集成)。这个插件非常强大,自然也包含了文字溢出时显示省略号的功能。使用时只要将 TextMesh Pro UGUI 组件中的 Overflow 选项设为 Ellipsis 即可。这个插件甚至能够很自然地实现多行文本的省略号截断。
但是这个方案有很明显的缺点—— TextMesh Pro 不支持动态字体,因此除非产品只需要英文,并且愿意使用 TextMesh Pro 自带的默认字体,否则一般都需要用插件自带的 Font Asset Creator 制作静态字体。这就意味着至少有如下几点需要注意:
- TextMesh Pro 用的是 Unicode 编码,因此制作字体的时候要确保包含编码为 u2026 也就是省略号的字符,否则省略号截断的功能就没有效果。
- 静态字体往往体积很大。我曾试着制作8192 × 8192的3500常用汉字的字体贴图