US3S2L3——纹理结合光照模型
US3S2L3——纹理结合光照模型
单张纹理结合 BlinnPhong 光照模型
如果要让有纹理的模型受到光照影响,就需要让纹理颜色结合光照模型计算出来的颜色,计算出模型显示在屏幕上的最终颜色
体现在 Shader 计算中,有以下的三点注意点:
纹理颜色 需要和 漫反射颜色 进行乘法叠加,它们两共同影响最终的颜色,也就是需要计算反射颜色
123456789101112131415sampler2D _MainTex; // 贴图纹理对应的映射成员fixed4 _MainColor; // 漫反射颜色struct v2f{ float4 pos: SV_POSITION; //裁剪空间下的顶点坐标 float2 uv: TEXCOORD0; //纹理UV坐标 float3 wNormal: NORMAL; //世界空间下的法线 float3 wPos: TEXCOORD1; //世界空间下的顶点坐标};fixed4 frag (v2f i) : SV_Target{ ...
U4S5L22——其他工具类
U4S5L22——其他工具类
TMP其它工具类
在使用TMP进行开发时,除了我们经常会用到的 TMP_TextEventHandler 和 TMP_TextUtilities 类以外
TMP还提供了很多工具类,比如:
TMP_Math:提供一些基础的数学计算
TMP_FontAssetUtilities:提供字体资源的操作和查询等方法
TMP_TextParsingUtilities:提供解析文本内容的工具
等等
这些内容我们虽然在日常开发时不经常使用,但是可以大概了解下
若遇到一些特殊需求时,可以选择使用其中提供的功能
更多API:Namespace TMPro | TextMeshPro | 4.0.0-pre.2 (unity3d.com)
U4S5L21——TMP_TextUtilities
U4S5L21——TMP_TextUtilities
本章代码关键字
12345TMP_TextUtilities.FindIntersectingLink() //传入点击相关参数,获取点击的超链接索引textMeshProUGUI.textInfo.linkInfo //文本的超链接数组textMeshProUGUI.textInfo.linkInfo[] //超链接数组索引器textMeshProUGUI.textInfo.linkInfo[].GetLinkText() //获取超链接显示文本textMeshProUGUI.textInfo.linkInfo[].GetLinkID() //获取超链接指向的链接
TMP_TextUtilities
TMP_TextUtilities 是 TextMeshPro 中提供的一个实用工具类
包含多个常用方法,主要用于获取指定位置的文本信息
我们主要在点击文本时,利用该类来获取点击到的具体内容
注意!
为了检测准确 ...
U4S5L20——TMP_TextEventHandler
U4S5L20——TMP_TextEventHandler
本章代码关键字
123456TMP_TextEventHandler //监听并响应TMP文本中的特定区域或标签的点击和鼠标悬停事件tmp_TextEventHandler.onLinkSelection //当用户悬停超链接时触发的事件tmp_TextEventHandler.onCharacterSelection //当用户悬停超链接时触发的事件tmp_TextEventHandler.onWordSelection //当用户悬停某个单词时触发的事件tmp_TextEventHandler.onLineSelection //当用户悬停某一行文本时触发的事件tmp_TextEventHandler.onSpriteSelection //当用户悬停某一精灵图片时触发的事件
TMP_TextEventHandler
TMP_TextEventHandler 是 TextMeshPro 中提供的一个交互工具类 ...
U4S5L19——SDF 材质球和参数设置
U4S5L19——SDF 材质球和参数设置
SDF
SDF 是 有符号距离场 (Signed Distance Field) 的缩写,其中:
有符号(Signed):指的是距离可以为正或负,表示一个点位于边界的内部(负值)还是外部(正值)
距离(Distance):表示每个像素点到字符边缘的距离
场(Field):指的是整个字体或图形周围的距离值的分布
它是一种用于高质量文本和图形渲染的技术,尤其适用于缩放或在低分辨率下保持边缘平滑的情况
它的本质就是在一个 Shader(着色器)中利用 SDF 相关算法规则来渲染文字
SDF 技术生成的字体纹理并不是普通的位图,而是基于每个像素到字体边缘的距离值。
这些距离值存储在纹理的灰度通道中,代表每个像素到字符边缘的距离信息。
然后在渲染时,着色器根据这些距离值动态计算字体的边缘,最终渲染出平滑的字符轮廓。
主要在 TMP 中用于生成和渲染文本,能让字体在任意大小或距离下保持清晰和锐利的效果
SDF 材质球指什么
我们创建的字体资源使用的材质球,本质上就是一个使用了 SDF 相关 Shader 的材质球
利用该Shader渲染出来的字体效果 ...
U4S5L18——TMP基本设置
U4S5L18——TMP基本设置
TMP 基本设置
在 Project Settings —— TextMesh Pro —— Settings 内可对 Text Mesh Pro 进行全局设置
Default Font Asset: 默认字体设置
当TMP控件使用非默认字体且显示缺少的字时,会尝试使用默认字体
Path:字体资源的存储位置
Fallback Font Assets:默认备用字体资源
Fallback Font Assets List:默认备用字体资源列表
Fallback Material Settings::备用材质设置
Match Material Presets: 匹配材质预设
启用后备用字体中的字形与主字体的样式匹配
让主字体和后备字体看起来类似
Dynamic Font System Setting:动态字体系统设置
Get Font Features at Runtime:运行时获取字体功能
Missing Character Unicode:当找不到字符时使用的替代字符
默认 0 表示是一个正方形的轮廓
...
U4S5L17——精灵图片资源(图文混排)
U4S5L17——精灵图片资源(图文混排)
精灵图片资源
精灵图片资源是配合富文本标签使用的资源,它可以让我们在 TMP 文本中显示图片,达到图文混排的目的
我们只需要创建并配置好精灵图片资源,便可以利用 富文本标签 在文本中显示图片
精灵图片资源的创建
根据自己的需求建立一个图集纹理
图集的参数需要设置为: Texture Type 为 Sprite、Sprite Mode 为 Multiple
并且我们需要在 Sprite Editor 中将图集中的图片划分为单独的 Sprite(需要导入2D Sprite包)
准备好图集文件后
在Project窗口中选中图集后 —> 右键 —> Text Mesh Pro —> Sprite Asset
创建后,一般我们需要为每个图片进行以下的设置:
名字设置
位置宽度相关设置
最好边使用边配置,默认创建的位置很可能存在问题,需要调整
其中的参数和字体参数类似,关键参数:
BX、BY:相对于基线的原点的左上角
AD:放置下一个内容时往右前进的位置
为了方便,可以通过最下方的全局偏移 OX、OY ...
U4S5L16——颜色渐变预设
U4S5L16——颜色渐变预设
颜色渐变预设的作用
让文本对象重复使用相同的颜色渐变,避免每次对文本单独进行设置,提高开发效率
颜色渐变预设的创建和使用
创建:
Project 窗口右键 —> TextMeshPro —> Color Gradient
创建好后,选中文件,在Inspector窗口即可开始编辑
颜色渐变预设配置文件的配置项和 TMP相关设置项 一致
使用:
在 TMP 文本中开启颜色渐变,拖入创建好的颜色渐变配置
注意:文本中颜色模式和配置文件中模式一致
显示效果:
U4S5L15——样式表
U4S5L15——样式表
样式表
样式表是TMP提供的一个和 富文本标签 配合使用的功能
我们可以利用 样式表 自定义一种文本样式
然后在富文本中使用 <style="样式表名"></style> 标签包裹想要应用该样式的文字
相当于可以重复利用样式,避免每次书写相同、冗余的富文本样式编码
样式表的本质是富文本标签,相当于是对富文本标签的复用
如何修改创建样式表
修改默认样式表
在Project窗口打开:TextMesh Pro/Resources/Style Sheets/Default Style Sheet
选中默认样式表配置后 可以在 Inspector 窗口修改 本质也是个 ScriptableObject 表
创建样式表
Project窗口右键 —> TextMeshPro —> Style Sheet
创建后,选中样式表文件 可以在 Inspector 窗口修改
一般情况下,我们无需新建样式表,在默认样式表中进行修改即可
样式表配置
样式表总是有一个 Normal 样式,它不需要进行任何配 ...
U4S5L14——富文本标签
U4S5L14——富文本标签
富文本标签
富文本标签是在很多文本处理系统中使用的标记语言,允许通过特定的标签来格式化文本内容。
这些标签可以控制文本的样式、颜色、大小和其他视觉效果,从而增强文本的表现力
它的写法类似 HTML 或 XML 标签
1<标签名>文本内容</标签>
或
1<标签名="值">文本内容</标签>
不同的标签会为文本带来不同的表现效果
TMP 使用富文本标签需要开启 Rich Text:是否开启富文本,默认开启
富文本标签的主要作用
富文本标签的主要作用,是可以让我们在一个TMP文本控件中让一段文字呈现出各种不同的表现效果
让文本表现效果更具吸引力和生动性,常常用于游戏的 UI文本、聊天窗口、说明文本 等等文本显示相关的系统中
常用富文本标签
换行 <br>
11234<br>学习TMP
显示效果:
文本加粗 <b></b>
11234<b>学习TMP</b>
显示效果:
文本斜体 <i& ...