Unity UGUI Text竖排显示

2023-10-24 10:30
文章标签 显示 unity text ugui 竖排

本文主要是介绍Unity UGUI Text竖排显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开发项目中偶尔会用到竖排显示字体,因为原生的UGUI没有这个功能,自己就结合一些网上资料整理写一个UI组件TextVirtical。
在Canvas下点击右键UI里找到TextVirtical创建即可

核心代码:

[AddComponentMenu("UI/TextVirtical", 10)]
public class TextVirtical : Text
{public bool IsVirtical = true;private float lineSpace = 1;private float textSpace = 1;private float xOffset = 0;private float yOffset = 0;protected override void OnPopulateMesh(VertexHelper toFill){base.OnPopulateMesh(toFill);if (IsVirtical){VirticalText(toFill);}}private void VirticalText(VertexHelper toFill){if (!IsActive())return;lineSpace = fontSize * lineSpacing;textSpace = fontSize * lineSpacing;xOffset = rectTransform.sizeDelta.x / 2 - fontSize / 2;yOffset = rectTransform.sizeDelta.y / 2 - fontSize / 2;for (int i = 0; i < cachedTextGenerator.lines.Count; i++){UILineInfo line = cachedTextGenerator.lines[i];int step = i;if (i + 1 < cachedTextGenerator.lines.Count){UILineInfo line2 = cachedTextGenerator.lines[i + 1];int current = 0;for (int j = line.startCharIdx; j < line2.startCharIdx - 1; j++){modifyText(toFill, j, current++, step);}}else if (i + 1 == cachedTextGenerator.lines.Count){int current = 0;for (int j = line.startCharIdx; j < cachedTextGenerator.characterCountVisible; j++){modifyText(toFill, j, current++, step);}}}}void modifyText(VertexHelper helper, int i, int charYPos, int charXPos){UIVertex lb = new UIVertex();helper.PopulateUIVertex(ref lb, i * 4);UIVertex lt = new UIVertex();helper.PopulateUIVertex(ref lt, i * 4 + 1);UIVertex rt = new UIVertex();helper.PopulateUIVertex(ref rt, i * 4 + 2);UIVertex rb = new UIVertex();helper.PopulateUIVertex(ref rb, i * 4 + 3);Vector3 center = Vector3.Lerp(lb.position, rt.position, 0.5f);Matrix4x4 move = Matrix4x4.TRS(-center, Quaternion.identity, Vector3.one);float x = -charXPos * lineSpace + xOffset;float y = -charYPos * textSpace + yOffset;Vector3 pos = new Vector3(x, y, 0);Matrix4x4 place = Matrix4x4.TRS(pos, Quaternion.identity, Vector3.one);Matrix4x4 transform = place * move;lb.position = transform.MultiplyPoint(lb.position);lt.position = transform.MultiplyPoint(lt.position);rt.position = transform.MultiplyPoint(rt.position);rb.position = transform.MultiplyPoint(rb.position);helper.SetUIVertex(lb, i * 4);helper.SetUIVertex(lt, i * 4 + 1);helper.SetUIVertex(rt, i * 4 + 2);helper.SetUIVertex(rb, i * 4 + 3);}
}

}`

自己整理一个package地址:链接:https://pan.baidu.com/s/1YDf3ireTh2n3ZVf4Js581A 提取码:p7sz
使用方式: 在导入package后在Canvas下点击鼠标右键UI里找到TextVirtical创建即可

这篇关于Unity UGUI Text竖排显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

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

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