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

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

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