• Unity技术手册-UGUI零基础详细教程-Text文本(打字、阴影、渐变)


    往期文章分享

    本文约8千字,新手阅读需要20分钟,复习需要12分钟收藏随时查阅不再迷路

    👉关于作者

    众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
    专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
    有什么需要欢迎私我,交流群让学习不再孤单

    在这里插入图片描述

    👉前提

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

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

    新手(√√√)

    大佬(√)

    👉实践过程

    在这里插入图片描述
    从图中看Text的属性并不多,最开始的输入框就是你想让Text显示的内容,英文显示,但中文以及中文的某些符号受字体文件的影响。
    Font:指定字体文件,ttf后缀的那种。
    Font Style:字体样式,有四个选项:Normal(正常)、Bold(加粗)、Italic(斜体)、BoldAnd Italic(加粗和斜体)
    Font Size:字体大小设置,注意当你的字体大小超出了Text控件的宽高,可能不会显示文本。
    Line Spacing:设置行间距,扩大行与行之间的距离。
    Rich Text:设置是否支持富文本,也就是Html标记语言。可以实现一句话里面字字体大小和颜色何不相同,目前支持下面几个标签:加粗倾斜颜色、大小。
    Alignment:设置对齐方式,居左还是居右,居上还是居下,或者居中
    Align By Geometry:使用区段的字形几何执行水平对齐,可以导致更好的拟合左和右对齐,但可能会导致不正确的定位。说白了,就是开启后紧贴Text组件的边框更近了。
    Horizontal Overflow:控制超出宽度后的文字变化,有两个值Wrap(是控制在没有输入回车的情况下,当超过宽度时候文本自动换行),Overflow(当超过宽度的时候,文本还会继续显示,显示在宽度外面)
    Vertical Overflow:控制超出高度后的文字变化,,有两个值Truncate(当超过高度时候文本不再显示),Overflow(当超过高度的时候,文本还会继续显示,显示在高度外面)
    Best Fit:最佳适应,默认不勾选,勾选后会让你输入最大字大小和最小字体大小,控件会根据文本的多少自动调整大小。
    Color:设置文本颜色
    Material:设置材质
    Raycast Target:设置是否受到射线的检测,关闭后当鼠标经过该控件射线检测代码不会触发。

    😜代码中修改属性

    public class Textgai : MonoBehaviour
    {
       
        //UI中你的Text控件
        public Text yourText;
        void Start()
        {
       
            //字体大小
            yourText.fontSize = 15;
            //文字格式正常,斜体,粗斜,加粗
            yourText.fontStyle = FontStyle.Normal;//.Italic.BoldAndItalic.Bold;
            //行间距
            yourText.lineSpacing = 1.2f;
            //是否支持富文本
            yourText.supportRichText = true;
            yourText.alignment = TextAnchor.LowerCenter;
            //使用字形几何范围来执行水平对齐,而不是使用音质度量。
            yourText.alignByGeometry = false;
            //水平竖直模式 ==》 Overflow:溢出模式【不考虑文本的width或者height的限制,显示全部文本内容】
            //Wrap 或者 Truncate 在文本width或者height区域内显示,超出部分被隐藏【包括字体大小超出】
            yourText.horizontalOverflow = HorizontalWrapMode.Overflow;
            yourText.verticalOverflow = VerticalWrapMode.Truncate;
            //应该允许文本自动调整大小。
            yourText.resizeTextForBestFit = true;
            //设置 BestFit 为True后
            //当前文本区域显示不开后,内容会自动缩小字号;  【会忽略原字体大小】
            yourText.resizeTextMinSize = 10;
            yourText.resizeTextMaxSize = 40;
            //文本颜色 【有渐变色时,此属性不起作用】
            yourText.color = new Color32(0, 0, 0, 0);
    
            //文本材质 path:是Resources下面材质目录
            yourText.material = Resources.Load("path", typeof(Material)) as Material;
    
            //是否进行射线检测
            yourText.raycastTarget = false;
        }
    }
    
    • 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

    😜空格问题

    因为文本有自动换行,所以可能造成这个问题,就是换行了,因为Unity是国外英语开发的,所以空格单词放不下换行还算合理(单词没那么长),而中文一句话可能不短,这时候换行就不合适了。
    在这里插入图片描述
    在这里插入图片描述
    解决这个问题需要“\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("逐字显示完成的回调");
    //});
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    如果是其他方式,可以在Update中不断取字符串之后给text赋值即可。
    其次,打字效果如果是在代码中设置,需要额外写脚本,脚本来源于新发大佬的文章:
    https://blog.csdn.net/linxinfa/article/details/115461154

    public class RichText : MonoBehaviour
    {
       
        public delegate void OnComplete();
    
        [SerializeField] private float _defaultSpeed = 0.05f;
    
        private Text label;
        private string _currentText;
        private string _finalText;
        private Coroutine _typeTextCoroutine;
    
        private static readonly string[] _uguiSymbols = {
       "b", "i"};
        private static readonly string[] _uguiCloseSymbols = {
       "b", "i", "size", "color"};
        private OnComplete _onCompleteCallback;
    
        private
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    初识Kafka
    深度学习网络模型——DenseNet模型详解与代码复现
    95740-26-4|用于体内DNA合成的探针F-ara-EdU
    AI-线性回归模型
    Knockoutjs属性绑定(Bindings)之流程控制(Control flow)
    计算机网络-http协议和https的加密原理
    【JavaScript】Web API基础(五)
    vs2013调试的时候我想查看某个变量的值的窗口被我删了,我需要找到那个查看局部变量的值的窗口
    大学生餐饮主题网页制作 美食网页设计模板 学生静态网页作业成品 dreamweaver美食甜品蛋糕HTML网站制作
    Redis的介绍,安装Redis的方式
  • 原文地址:https://blog.csdn.net/qq_27489007/article/details/127526616