UGUI Text 重写Spacing字体间距

2024-03-11 18:36

本文主要是介绍UGUI Text 重写Spacing字体间距,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

using UnityEngine;
using UnityEngine.UI;[AddComponentMenu("UI/Effect/UGUITextSpacing")]
[RequireComponent(typeof(UnityEngine.UI.Text))]//Text组件是必须的
public class UGUITextSpacing : BaseMeshEffect
{public enum HorizontalAligmentType{Left,Center,Right}public float fSpacing = 1.0f;public override void ModifyMesh(VertexHelper vh){//一个文字有4个顶点  4个顶点组成两个三角面  如果顶点少于4个 说明text内容为空 就没必要去做字间距调整了if (!IsActive() || vh.currentVertCount < 4 || fSpacing == 0){return;}Text cText = transform.GetComponent<Text>();// 对齐方式,对于不同的对齐方式 对文字顶点的坐标偏移值计算方式不同HorizontalAligmentType alignment;if (cText.alignment == TextAnchor.LowerLeft || cText.alignment == TextAnchor.MiddleLeft || cText.alignment == TextAnchor.UpperLeft){alignment = HorizontalAligmentType.Left;}else if (cText.alignment == TextAnchor.LowerCenter || cText.alignment == TextAnchor.MiddleCenter || cText.alignment == TextAnchor.UpperCenter){alignment = HorizontalAligmentType.Center;}else{alignment = HorizontalAligmentType.Right;}int nWordCount = vh.currentVertCount / 4;//总字数//总的字间距偏移值float fTotalSpace = (nWordCount - 1) * fSpacing;float fOffsetX = 0.0f;UIVertex vertex = new UIVertex();for (int index = 0; index < nWordCount; index++){if (alignment == HorizontalAligmentType.Left){//左对齐的话 相当于对于每个字 坐标往右偏移对应字间距值  第一个字不用偏移 fOffsetX = index * fSpacing;}else if (alignment == HorizontalAligmentType.Right){//和左对齐类似fOffsetX = index * fSpacing  - fTotalSpace;}else if (alignment == HorizontalAligmentType.Center){//居中对齐 类似左对齐之后 整体往左偏移总字间距的50% 那么在计算的时候直接减50%总字间距就好了fOffsetX = index * fSpacing - fTotalSpace / 2;}for (int pIndex = 0; pIndex < 4; pIndex++){int nVerticeIndex = index * 4 + pIndex;//对应索引vh.PopulateUIVertex(ref vertex, nVerticeIndex);//取出对应对应索引的顶点vertex.position += new Vector3(fOffsetX, 0, 0);//顶点偏移vh.SetUIVertex(vertex, nVerticeIndex);//更新下顶点坐标信息}}}
}

这篇关于UGUI Text 重写Spacing字体间距的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798683

相关文章

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

什么是LED智能会议一体机?COB超微小间距LED会议一体机大势所趋

LED智能会议一体机,作为现代会议室革新的核心装备,正逐步颠覆传统会议模式的界限。它不仅仅是一台集成了高清显示、触控互动、音视频处理及远程协作等功能于一体的智能设备,更是推动会议效率与体验双重飞跃的关键力量。随着技术的不断进步,特别是COB(Chip On Board)超微小间距LED技术的引入,LED智能会议一体机正迎来前所未有的发展机遇,成为大势所趋。 COB技术通过将LED芯片直接封装在基

全倒装COB超微小间距LED显示屏的工艺技术,相比SMD小间距有何优势

全倒装COB(Chip On Board)超微小间距LED显示屏,在工艺技术上的革新,相较于传统的SMD(Surface Mount Device)小间距LED显示屏,展现出了多方面的显著优势。 首先,全倒装技术极大地提升了LED芯片的散热性能。通过将芯片直接焊接在基板上,减少了热阻,使得热量能够更快速地传导至基板并散发出去,有效避免了因高温导致的光衰和色彩偏移问题,从而保证了显示屏的长期稳定性