在蛮牛上看到有人需要竖排显示Text里面的文本,但是Text又没有这个功能,所以我就在网上找了找,果然有解决办法,然后我就进行了整理,写了一个TextPro的组件,也就是Text的加强版,可以横竖排切换。实现原理是继承了Text,重写了OnPopulateMesh方法。下面上代码。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | using System; using System.Collections.Generic; namespace UnityEngine.UI {     /// <summary>     /// Labels are graphics that display text.     /// </summary>     [AddComponentMenu("UI/TextPro", 10)]     public class TextPro : Text     {         public bool m_Virtical = false;         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 (m_Virtical)             {                 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);         }     } } | 


可以通过Virtical属性改变Text的竖排显示。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1030
下载链接: https://pan.baidu.com/s/1vrr-Huel82Y1P59ipj5peg 提取码: fddg文章源自大腿Plus-https://www.zhaoshijun.com/archives/1030 文章源自大腿Plus-https://www.zhaoshijun.com/archives/1030
					我的微信
				
				微信扫一扫
				 
					shijun_z
					
					我的QQ
				
				QQ扫一扫
				 
					846207670
					 
							

 
					
评论