Unity技术手册-Text解决空格问题、实现打字特效、轮廓阴影、渐变

1,093 阅读3分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

欢迎关注公众号【空名先生】获取更多资源和交流!

👉前提

这是小空坚持写的Unity新手向系列,欢迎品尝。

小空为了方便更多的人(新手)看明白,使用的汉字,真实项目尽量使用英文规则昂。

新手(√√√)

大佬(√)

👉实践过程

😜空格问题

因为文本有自动换行,所以可能造成这个问题,就是换行了,因为Unity是国外英语开发的,所以空格单词放不下换行还算合理(单词没那么长),而中文一句话可能不短,这时候换行就不合适了。

image.png

image.png

解决这个问题需要“\u3000”字符来替换,直接在组件上输入时,将输入法调成全角然后输入空格即可实现,如果是代码中修改,获取文本然后利用字符串替换即可(字符串.Replace(" ", "\u3000");)

😜打字特效

如果你用了DOTween插件,那么很方便:

public Text yourText;
//获取Text组件
//您要显示文本内容
string temp_content = "这是一个逐字出现的效果,利用了DOTween插件实现的";
yourText.DOText(temp_content, 6);
//带回调的方式
//mText.DOText(temp_content, 6).OnComplete(()=> {
//     Debug.Log("逐字显示完成的回调");
//});
 

//添加Ease枚举中设定的缓动动画
//mText.DOText(temp_content, 6).SetEase(Ease.InBack).OnComplete(() => {
//     Debug.Log("逐字显示完成的回调");
//});

如果是其他方式,可以在Update中不断取字符串之后给text赋值即可。

😜轮廓和阴影

只需要继承Unity内置的Outlinse脚本即可,只有三个个属性很简单,Effect Color表示轮廓颜色,Effect Distance表示阴影偏移位置,Use Graphic Alpha表示是否受透明度影响,默认是勾选的,勾选文本的透明度变化的话,轮廓阴影也对应变化,进而保持一个良好的效果,不勾选则不变化。

image.png

😜渐变

渐变需要单独自定义脚本实现,实现眼里是继承BaseMeshEffect,覆写ModifyMesh,拿到当前的矩阵,然后利用颜色插值Lerp运算来实现。

/// <summary>
/// 渐变字体,并且添加到Inspector的快捷Add Component中
/// </summary>
[AddComponentMenu("UI/Effects/TextGradien")]
public class TextGradien : BaseMeshEffect
{
    public Color32 topColor = Color.white;
    public Color32 bottomColor = Color.black;
    public bool useGraphicAlpha = true;
    public override void ModifyMesh(VertexHelper vh)
    {
        if (!IsActive())
        {
            return;
        }
        var count = vh.currentVertCount;
        if (count == 0)
            return;
 
        var vertexs = new List<UIVertex>();
        for (var i = 0; i < count; i++)
        {
            var vertex = new UIVertex();
            vh.PopulateUIVertex(ref vertex, i);
            vertexs.Add(vertex);
        }
 
        var topY = vertexs[0].position.y;
        var bottomY = vertexs[0].position.y;
 
        for (var i = 1; i < count; i++)
        {
            var y = vertexs[i].position.y;
            if (y > topY)
            {
                topY = y;
            }
            else if (y < bottomY)
            {
                bottomY = y;
            }
        }
 
        var height = topY - bottomY;
        for (var i = 0; i < count; i++)
        {
            var vertex = vertexs[i];
            var color = Color32.Lerp(bottomColor, topColor, (vertex.position.y - bottomY) / height);
 
            vertex.color = color;
            vh.SetUIVertex(vertex, i);
        }
    }
}

挂载在Text上即可。

image.png

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

本文正在参加「金石计划 . 瓜分6万现金大奖」