【Unity基础】TextMeshPro组件学习过程记录

目录

  • 1.TextMeshPro组件
    • 渲染
    • 创建文本
      • RTL Editor
      • 字体
        • Font Asset
        • 字体加粗,下划线等
        • 字体大小控制
        • 字体颜色控制
        • 字体渐变控制
        • 字符间隔、单词间隔、行间距、段落间距控制
        • Wrapping
        • UV映射控制
        • 代码
  • 2.TextMeshPro组件Asset
    • Face Info
    • Generation Setting
  • 3.使用Dynamic SDF System创建中文字体
  • 4.SDF算法原理
    • SDF生成
  • 具体文档地址

1.TextMeshPro组件

TextMeshPro是Unity官方用来代替Text的一种方案,提供了性能更好,效果更佳的一种文本显示方案
,能够更好地控制文本格式和布局,提供字符、单词、行、段落间距离调整、字距调整、文本对齐、链接、超过30种富文本标签、多种字体和精灵支持、自定义样式等功能。

渲染

在这里插入图片描述
文本的每个字符都使用了两个三角形,四个顶点,就算使用了描边,阴影等效果也不会有额外的顶点生成,这说明了TextMeshPro的强大性能。

创建文本

在Hierarchy面板上右击时,我们发现TextMeshPro有两处可以进行创建,第一个在菜单3D Object里,第二个在UI里面,也就是说TextMeshPro可以创建为场景的3D对象和Canvas下的UI元素。

创建中创建一个UI的TextMeshPro。

RTL Editor

启用此选项可从右到左而不是从左到右显示文本。
检查器会显示一个附加的输入字段,您可以在其中查看反转的文本并直接对其进行编辑。
文本在显示在屏幕上或呈现之前会反转。
在这里插入图片描述

字体

Font Asset

用来给予字体资源的字段

字体加粗,下划线等

查看Inspector面板中,材质下方的Font Style(注意不是Text Style)主要用来控制加粗,斜边,下划线、画线、全部小写、全部大写、首个字母最大化。
在这里插入图片描述

字体大小控制

Font Size主要控制字体大小,Auto Size勾选是进行文本边框大小的自适应,auto size options主要是进行最大值最小值等限制
在这里插入图片描述

字体颜色控制

Vertex Color主要用来控制字体颜色。

字体渐变控制

Color Gradient主要用来处理渐变效果的
在这里插入图片描述
值得注意的时候,TextMeshPro能够进行水平方向的渐变,也能够支持垂直方向的渐变,也可以支持四个方向的渐变。

字符间隔、单词间隔、行间距、段落间距控制

Spacing Options 里面的Character、Word、Line、Paragrah分别进行字符间隔、单词间隔、行间距、段落间距控制。

Wrap Mix主要是控制对齐方式的拉伸的。

Wrapping

主要用来控制文本框越界的一些情况

UV映射控制

Horizontal Mapping和Vertical Mapping主要是用来控制UV如何进行映射,主要进行UV拉伸的控制。

代码

如下截图,使用的方式和Text组件是差不多的。不过注意的是,场景中的C#脚本是TextMeshPro而UI版本为TextMeshProUGUI
在这里插入图片描述

2.TextMeshPro组件Asset

具体的文档地址如下:
https://docs.unity3d.com/Packages/com.unity.ugui@2.0/manual/TextMeshPro/FontAssetsProperties.html

Face Info

Face Info 属性控制字体的线条度量。它们还包括字体资产创建器在创建资产时生成的只读属性。
在这里插入图片描述
Face Info下可以对当前使用的字体的一些参数进行调整

Generation Setting

字体资产创建器会在您生成字体资产时生成这些值。
在这里插入图片描述

3.使用Dynamic SDF System创建中文字体

动态SDF系统,简单理解就是根据使用的文本来动态生成字体纹理
发现使用一个默认的字体资源是不支持中文的
在这里插入图片描述
选择一个支持中文的Tff字体文件来创建出Font Asset并且选择赋值进Font Asset,如何选择动态的图集时候,就发现中文显示出来了。(创建的方法是选中对应的字体Tff文件,右击Create>TextMeshPro>FontAsset)
在这里插入图片描述
在这里插入图片描述
这个时候使用到的字体都会存到生成的字体图集里面去了。
在这里插入图片描述
每次用到新的字体的时候都会把对应的字保存到图集里面去了。
在这里插入图片描述

当文字比较多的时候那么可以使用静态字体。通常处理方式是下载一个【汉字常用3500字】、【中文常用5000字】等的一个txt文件,用Unicode编码保存。(txt文本,另存为——格式:utf8)
把这个txt文件导入Unity中。

在Unity中——>Window——>TextMeshPro——>Font Asset Creator中的Source Font Flie选择添加好的中文字体。

在Character Flie中选择3500常用字文件。

根据文字数量修改Atlas Resolution。

点击 Generate Font Atlas生成。

在这里插入图片描述

注意:文字过多,Atlas Resolution选择大小不要太小。

最后Save保存一下生成的字体asset。

4.SDF算法原理

TextMeshPro是基于SDF算法生成字体纹理图集的。
SDF,全称signed distance field。原理很简单,确实就是使用一张纹理来记录下一些数据,纹理上的每个像素点分别记录改像素到物体的距离,所以名称叫有向距离场。
假色在物体外部为整数,越远数值越大。
正好在边缘上,数值为0
在物体内部数值为负数。

如下图所示,红色为整数,绿色代表0边缘,负数都显示成黑色。那么一个圆形的2D图形,生成的Texture2D,四周的为整数,所以颜色都为红色,越远越红。
在这里插入图片描述
SDF算法有非常广泛的应用。
比如字体坑锯齿。
比方说使用常规的字体纹理渲染的字体
在这里插入图片描述
放大15倍数后
在这里插入图片描述
而如果基于SDF渲染的字体放大15倍后
在这里插入图片描述
这是达到了一种位图的效果了。
当然也可以应用到后处理,阴影贴图等等。

SDF生成

生成SDF,使用8ssedt,这里给出里算法,SDF

慢慢完善(实践=.=)

具体文档地址

查询官方文档是非常重要的
https://docs.unity3d.com/Packages/com.unity.ugui@2.0/manual/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11_Scala函数柯理化惰性函数

1.函数柯里化 def test(a: Int, b: Int): Unit {for (i <- 1 to a) println(i)for (i <- 1 to b) println(i)}var a 10;var b 100test(a, b)2.构成柯里化 **函数柯里化的做法&#xff0c;就是将无关的参数进行分离&#xff0c;可以设定多个参数列表&#xff1b;** **…

【可视化3D卷积计算过程】

目录 1. 可视化过程2. 代码验证 前言&#xff1a;开始处理视频数据&#xff0c;遇到了陌生又熟悉的3D卷积&#xff0c;但对其计算过程有点疑惑&#xff0c;网上也没找到什么可视化动画&#xff0c;所以研究明白并做个记录&#xff0c;方便日后复习。有点简化&#xff0c;但认真…

Java知识点汇总

数据类型: 计算机中存储数据的最小单位为比特位(b),其值为0或1,8个比特位组成一个字节(B),KB、MB、GB、TB 1个英文字母占一个字节,一个汉子占两个字节,字节的取值为-128–127,数字分为整数、浮点、长整,12488421 关键字 this 调用当前对象的属性、构造方法和方法 …

基于FCN网络实现的多类别图像分割任务

1、前言 FCN 作为图像分割的开山之作&#xff0c;将分割任务作为逐个像素点的分类任务 之前完成了基于unet、resnetunet、deeplab等等网络的分割任务&#xff0c;具体的可以参考本专栏&#xff1a; 图像分割_听风吹等浪起的博客-CSDN博客 因为FCN网络的实现较为复杂&#xf…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考&#xff1a; CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽&#xff1a;bit描述帧起始SOF(Start Of Frame)1数据帧起始标志&#xff0c;固定为1bit显性(b0)仲裁段dentify(ID)11本数…

网安行业拐点!网络安全6大企业2023年报盘点

回顾2023&#xff1a;寒冬中的市场概览 2023年&#xff0c;网络安全行业经历了前所未有的挑战。全球经济波动与行业竞争加剧&#xff0c;加之下游客户预算收紧&#xff0c;招投标流程延长&#xff0c;使得整个行业感受到了冬日的严寒。裁员和不发年终奖金的决定在行业中成为普…

记录些RAG-Fusion、Agent、NL2SQL的问题

RAG-Fusion RAG-Fusion 的实现原理 Query Duplication with a Twist&#xff1a;用 LLM 根据用户的 Query 生成几个相关的但不同的 Queries。Vector Search Unleashed&#xff1a;对原 Query 和生成的 Queries 都进行向量&#xff08;或者其他方式的&#xff09;搜索。Intell…

DiffusionGAN ——最快的小波扩散模型应用研究

介绍 扩散模型最近出现并迅速发展&#xff0c;吸引了许多研究人员的兴趣。这些模型能从随机的噪声输入生成高质量的图像。在图像生成任务中&#xff0c;它们的表现尤其优于最先进的生成模型&#xff08;GANs&#xff09;。扩散模型可以灵活地处理各种条件输入&#xff0c;从而…

GO语言核心30讲 基础知识

原站地址&#xff1a;Go语言核心36讲_Golang_Go语言-极客时间 1. 两种声明变量方式的差异&#xff1a; 短变量声明 name : "abc" 只能在函数体内部使用。 var name "abc" 这方式才可以用在所有地方。 2. 类型推断有什么好处&#xff1f; 代码重构时更方…

meterpreter运行run getgui -e报错

meterpreter运行run getgui -e报错 meterpreter > run getgui -e [!] Meterpreter scripts are deprecated. Try post/windows/manage/enable_rdp. [!] Example: run post/windows/manage/enable_rdp OPTIONvalue [...] [-] The specified meterpreter session script cou…

【C++第三阶段】list容器排序

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值和交换大小操作插入和删除数据存取反转和排序排序案例 list容器在STL中是双向循环链表。 如图所示&#xff0c;每一个节点三个域&#xff0c;前向指针域&#xff0c;后…

用户中心(上)

文章目录 企业做项目流程需求分析技术选型计划初始化项目数据库设计登录/注册⽤户管理&#xff08;仅管理员可⻅&#xff09; 初始化项目⼀、前端初始化1.下载nodejs2.Ant Design Pro相关问题1.前端项目启动时报错、无法启动&#xff1f;2.如何初始化前端项目&#xff1f;为什么…

vue 模板字符串

1.模板字符串换行问题 white-space: pre-wrap; 2. 鼠标移入 显示提示框 点击手动隐藏 myChart.on("mouseover", function (params) {myChart.dispatchAction({type: "downplay",}); }); tooltip: {show: true, //是否显示提示框组件&#xff0c;包括…

机器人实验室CNRS-AIST JRL, IRL介绍

一、背景 作为搞机器人方向的学生&#xff0c;必须时常关注国际上顶尖实验室的研究成果&#xff0c;以免自己做的方向out&#xff0c;除了大家耳熟能详的Boston Dynamics&#xff0c;还有许多非常厉害的机器人实验室值得我们关注&#xff0c;如日本的CNRS-AIST JRL, IRL实验室…

spring cache(一)介绍

一、介绍 1、背景 项目中使用最多的缓存技术就是Redis,用Redis就可以实现了&#xff0c;为什么需要使用spring cache&#xff1f; 先看下我们使用缓存步骤: &#xff08;1&#xff09;查寻缓存中是否存在数据&#xff0c;如果存在则直接返回结果 &#xff08;2&#xff09…

虚函数表与虚函数表指针

虚函数表与虚函数表是用来实现多态的&#xff0c;每一个类只有一个虚函数表 静态多态&#xff1a;函数重载&#xff08;编译期确定&#xff09; 动态多态&#xff1a;虚函数&#xff08;运行期确定&#xff09; 虚函数表的创建时机&#xff1a; 生成时间&#xff1a; 编译期…

【k8s】(九)kubernetes1.29.4离线部署之-Token过期后加入节点

&#xff08;一&#xff09;kubernetes1.29.4离线部署之-安装文件准备 &#xff08;二&#xff09;kubernetes1.29.4离线部署之-镜像文件准备 &#xff08;三&#xff09;kubernetes1.29.4离线部署之-环境初始化 &#xff08;四&#xff09;kubernetes1.29.4离线部署之-组件安装…

生活服务推出品牌实惠团购,覆盖五一假期“吃喝玩乐”多场景

4月26日&#xff0c;抖音生活服务平台上线“跟着大牌过五一”活动会场&#xff0c;携手22家连锁品牌商家&#xff0c;于“五一”前推出优价团购和时令新品&#xff0c;覆盖“吃喝玩乐”多重购物需求&#xff0c;助力假期消费。同时&#xff0c;伴随各地涌现的文旅热潮&#xff…

SAP-ABAP-创建数据元素-02

事物码&#xff1a;SE11 三种数据对象&#xff0c;此处选择‘数据元素’ 基本类型&#xff1a;可以使用预定义或者域&#xff0c;下面一预定义为例&#xff0c;维护数据类型CHAR和长度10 点击字段标签&#xff0c;维护长度和描述&#xff0c; 激活&#xff0c;那么这个数据元素…

JavaSE-14笔记【反射机制(+2024新)】

文章目录 1.反射机制概述2.获取Class的四种方式3.通过反射机制实例化对象*4.反射机制结合配置文件灵活实例化对象*5.java.lang.reflect.Field5.1反编译类中的所有字段/属性5.2 通过反射机制给属性赋值* 6.java.lang.reflect.Method6.1反编译类中的所有方法6.2 通过反射机制调用…