本文主要是介绍Unity UGUI Text竖排显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在开发项目中偶尔会用到竖排显示字体,因为原生的UGUI没有这个功能,自己就结合一些网上资料整理写一个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竖排显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!