Unity技术手册-TextMeshPro初步使用和主要属性

1,818 阅读5分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

欢迎关注公众号【空名先生】获取更多资源和交流!

👉前提

这是小空坚持写的Unity新手向系列,欢迎品尝。

小空为了方便更多的人(新手)看明白,使用的汉字,真实项目尽量使用英文规则昂。

新手(√√√)

大佬(√)

👉实践过程

😜TextMeshPro初识

TextMeshPro没法像普通的Text一样在代码中动态修改字体文件,她需要在使用之前提前对字体进行预处理来计算出SDF,而这个过程是非常耗时的,所以需要我们提前创建出来SDF字体文件。

😜什么是SDF?

Signed Distance Field,一般翻译为有向距离场,其实称为符号距离函数,其原理是文字贴图中存储的不仅仅是颜色还有距离,像素点每个点记录这个点到字样边缘的距离(如原字12大小,你设置了30大小,原字上的某个像素距离30大小相同位置像素的距离),会对距离进行插值计算来弥补。大致知道即可,不用深究,就像我们用电脑一样不用管CPU或显卡的制作技术。

😜使用及创建中文

现在版本的Unity已经默认右键创建UI的时候就已经提供了这个选项。当然了如果你没有导入过,会提示你进行插件导入,点击Import TMP Essentiais即可。

image.png

默认不做任何更改使用的时候输入英文内容是支持的,但是中文或者特殊符号或者中文符号都是无法渲染显示出来。 image.png 所以我们需要预生成中文字体的SDF文件,这个过程可能很耗时,因为中文文字相当多,如果你每个字都弄进去可能也没必要,所以一般是有一个常用汉字库.txt。仅生成你项目中需要的文字,从而减轻压力,但同样也会带来问题,比如后续你的应用或游戏更新了某个偏僻字恰恰里面没有,就会显示不出来。总之各有利弊,看自己的选择。

在Unity->Window->TextMeshPro->Font Asset Creator可以呼出创造字体的面板。

image.png

image.png 我们选择一个ttf格式的字体文件(Source Font File),注意这个字体文件要全,如果这个ttf里面都有一些字没有,那后面设置也照样没有。之后修改图集尺寸(Atlas Resolution)大小能够放下所有文字。基本是4096*4096是最大的了。修改(Character Set)为Character from File。因为我们提前准备了文本库(将文字都写入了txt里)。之后点击Generate Font Atlas即可。等待生产完毕后进行保存。之后就可以在TextMeshPro中引用了。

image.png 再输入汉字,就会发现显示正常。

😜主要属性

image.png

Font Asset:这是TextMeshPro字体资源。

Material Preset:材质预设,一般不用管

Font Style:对文本应用全局样式,粗体、斜体,下划线,删除线,全部小写,全部大写,以及SC(smallcaps)大写保持原状,小写变成大写,但文字大小比默认大写小一些等

Font Size:字体大小。

Auto Size:动态调整点大小。在最小值和最大值之间,以适应文本容器的大小。

Vertex Color:将被指定为顶点的颜色,每个字符的颜色(除非有颜色,已指定标记),其实就是文字颜色

Color Gradient:启用顶点颜色渐变,能实现很多效果,其内有三个属性,Color Preset选择渐变预设(当你导入过TextMeshPro之后在Project中右键找到Color Gradient可以创建预设,如下图),Color Mode设置水平渐变还是垂直渐变,更有四个角渐变和普通模式,Colors就是设置颜色了。

Override Color Tags:启用覆盖颜色标签,就是会使你文本中的相关标签失效。

Spacing Options:允许调整字符之间、单词之间、行之间、段落之间的间距,单位是em。

Alignment:控制文本的对齐方式,选项有左、中、右和对齐。

Wrapping:启用或禁用自动换行,注意不是回车键和\n,而是文本长度超出宽度的自动换行。

Overflow: 决定了文本超出显示区域要怎么处理。overflow模式表示文本会延申到显示区域外面;  Elipsis模式会把显示区域外的文字裁切掉(不显示)并在显示区域内文字末尾加上三个点…来表示有文字省略了;  Masking模式将会将文本按类似overflow的方式渲染,但是所有在显示区域外的文字会被shader隐藏,这只对UI物体有效,对3D物体无效。Scroll Rect也有类似的用途,但不推荐使用;  Truncate模式就是简单的把显示区域外面的文字裁切掉;  Page模式会将文本划分为几页,你可以选择要显示哪一页。由于页面是单独显示的,所以垂直对齐按每页进行。也可以使用富文本手动插入分页符;  Linked表示连接模式,会让你指定一个TMP_Text,表示超出文本会显示在另一个UI文本上,另一个UI文本Text里的属性除了不能再输入文本外,照样可以生效。

Horizontal Mapping: 没看懂

Vertical Mapping:没看懂

image.png

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

本文正在参加「金石计划 . 瓜分6万现金大奖」