UGUI 文本加粗

    技术2022-07-11  112

    这是用的Aril字体,通常情况下,直接用<b>达不到这样粗的效果,所以需要重新写一个字体效果,类似描边的效果。

    上面的图片就是效果和所设置的参数。

    下面是代码,参考其他人的代码改编的

    using UnityEngine; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine.UI; [RequireComponent(typeof(Text))] public class BoldTextEffect : BaseMeshEffect { [Range(1, 5)] public int Strength = 5; public int startBIndex = 0; public int endBIndex = 999; private Text m_Text = null; private Text TextComp { get { if (m_Text == null) { m_Text = GetComponent<Text>(); } return m_Text; } } public Color effectColor = Color.white; protected void ApplyShadowZeroAlloc(List<UIVertex> verts, Color32 color, int start, int end, float x, float y) { int num = verts.Count + end - start; if (verts.Capacity < num) verts.Capacity = num; for (int index = start; index < end; ++index) { UIVertex vert = verts[index]; verts.Add(vert); Vector3 position = vert.position; position.x += x; position.y += y; vert.position = position; Color32 color32 = color; vert.color = color32; verts[index] = vert; } } private static readonly Regex s_BoldBeginRegex = new Regex("<b>", RegexOptions.Singleline); private static readonly Regex s_BoldEndRegex = new Regex("</b>", RegexOptions.Singleline); private MatchCollection begin = null; private MatchCollection end = null; public override void ModifyMesh(VertexHelper vh) { if (!IsActive()) { return; } List<UIVertex> verts = new List<UIVertex>(); vh.GetUIVertexStream(verts); begin = s_BoldBeginRegex.Matches(TextComp.text); end = s_BoldEndRegex.Matches(TextComp.text); if (begin != null && end != null) { int i = startBIndex; if (i < 0) i = 0; for (; i < endBIndex && i < begin.Count && i < end.Count; ++i) { ApplyShadowZeroAlloc(verts, effectColor, begin[i].Index * 6, end[i].Index * 6, 1, 0f); for (int j = 0; j < Strength; ++j) { ApplyShadowZeroAlloc(verts, effectColor, begin[i].Index * 6, end[i].Index * 6, -1, 0f); } } } vh.Clear(); vh.AddUIVertexTriangleStream(verts); } }

     

    Processed: 0.009, SQL: 9