unity3d 文字颜色渐变_unity3d image 颜色渐变 - CSDN
  • 首先新建一个material,在inspector选择Shader:UI/Default 然后,如图

    首先新建一个material,在inspector选择Shader:UI/Default   

    然后,如图


    展开全文
  • unity原生的Text文本的颜色虽是可调但是只能是单一颜色,不能达到颜色渐变效果。 下面我就贴代码了: 两色渐变 using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections....

    unity原生的Text文本的颜色虽是可调但是只能是单一颜色,不能达到颜色的渐变效果。

    下面我就贴代码了:

    两色渐变

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using System.Collections.Generic;
    
    [RequireComponent(typeof(Text))]
    public class TextVerticalGradientTwoColor : BaseMeshEffect
    {
    
        
            public Color colorTop = Color.red;
            public Color colorBottom = Color.green;
    
            protected TextVerticalGradientTwoColor()
            {
    
            }
    
            private static void setColor(List<UIVertex> verts, int index, Color32 c)
            {
                UIVertex vertex = verts[index];
                vertex.color = c;
                verts[index] = vertex;
            }
    
            private void ModifyVertices(List<UIVertex> verts)
            {
                for (int i = 0; i < verts.Count; i += 6)
                {
                    setColor(verts, i + 0, colorTop);
                    setColor(verts, i + 1, colorTop);
                    setColor(verts, i + 2, colorBottom);
                    setColor(verts, i + 3, colorBottom);
    
                    setColor(verts, i + 4, colorBottom);
                    setColor(verts, i + 5, colorTop);
                }
            }
    
            #region implemented abstract members of BaseMeshEffect
    
            public override void ModifyMesh(VertexHelper vh)
            {
                if (!this.IsActive())
                {
                    return;
                }
                List<UIVertex> verts = new List<UIVertex>(vh.currentVertCount);
                vh.GetUIVertexStream(verts);
    
                ModifyVertices(verts);
    
                vh.Clear();
                vh.AddUIVertexTriangleStream(verts);
            }
    
            #endregion
    }
    

    三色渐变

    using UnityEngine;
    using System.Collections.Generic;
    using UnityEngine.UI;
    
    namespace UI.Extension
    {
        [AddComponentMenu ("UI/Effects/Text Vertical Gradient Color")]
        [RequireComponent(typeof(Text))]
        public class TextVerticalGradientThreeColor : BaseMeshEffect
        {
            public Color colorTop = Color.red;
            public Color colorCenter = Color.blue;
            public Color colorBottom = Color.green;
    
            public bool MultiplyTextColor = false;
    
            protected TextVerticalGradientThreeColor()
            {
    
            }
    
            public static Color32 Multiply(Color32 a, Color32 b)
            {
                a.r = (byte)((a.r * b.r) >> 8);
                a.g = (byte)((a.g * b.g) >> 8);
                a.b = (byte)((a.b * b.b) >> 8);
                a.a = (byte)((a.a * b.a) >> 8);
                return a;
            }
    
            private void ModifyVertices(VertexHelper vh)
            {
                List<UIVertex> verts = new List<UIVertex>(vh.currentVertCount);
                vh.GetUIVertexStream(verts);
                vh.Clear();
    
                int step = 6;
    
                for (int i = 0; i < verts.Count; i += step) {
                    //6 point
                    var tl = multiplyColor(verts[i+0], colorTop);
                    var tr = multiplyColor (verts [i+1], colorTop);
                    var bl = multiplyColor (verts [i+4], colorBottom);
                    var br = multiplyColor (verts [i + 3], colorBottom);
                    var cl = calcCenterVertex(verts[i+0], verts [i+4]);
                    var cr = calcCenterVertex (verts [i+1], verts [i+2]);
    
                    vh.AddVert (tl);
                    vh.AddVert (tr);
                    vh.AddVert (cr);
                    vh.AddVert (cr);
                    vh.AddVert (cl);
                    vh.AddVert (tl);
    
                    vh.AddVert (cl);
                    vh.AddVert (cr);
                    vh.AddVert (br);
                    vh.AddVert (br);
                    vh.AddVert (bl);
                    vh.AddVert (cl);
                }
    
                for (int i = 0; i < vh.currentVertCount; i += 12) {
                    vh.AddTriangle (i + 0, i + 1, i + 2);
                    vh.AddTriangle (i + 3, i + 4, i + 5);
                    vh.AddTriangle (i + 6, i + 7, i + 8);
                    vh.AddTriangle (i + 9, i + 10, i + 11);
                }
            }
    
            private UIVertex multiplyColor(UIVertex vertex, Color color)
            {
                if (MultiplyTextColor)
                    vertex.color = Multiply (vertex.color, color);
                else
                    vertex.color = color;
                return vertex;
            }
    
            private UIVertex calcCenterVertex(UIVertex top, UIVertex bottom)
            {
                UIVertex center;
                center.normal = (top.normal + bottom.normal) / 2;
                center.position = (top.position + bottom.position) / 2;
                center.tangent = (top.tangent + bottom.tangent) / 2;
                center.uv0 = (top.uv0 + bottom.uv0) / 2;
                center.uv1 = (top.uv1 + bottom.uv1) / 2;
    
                if (MultiplyTextColor) {
                    //multiply color
                    var color = Color.Lerp(top.color, bottom.color, 0.5f);
                    center.color = Multiply (color, colorCenter);
                } else {
                    center.color = colorCenter;
                }
    
                return center;
            }
    
            #region implemented abstract members of BaseMeshEffect
    
            public override void ModifyMesh(VertexHelper vh)
            {
                if(!this.IsActive())
                {
                    return;
                }
    
    
                ModifyVertices(vh);
            }
    
            #endregion
        }
    }


    参考文章:http://www.taidous.com/thread-44526-1-1.html


    展开全文
  • unity开发程序在一些必要的的程序的时候需要...最开始在网上看到了一些设置颜色渐变的都是直接对整体进行颜色设置,后来无意间发现了每个字由6个顶点构成,然后就修改成了下面设置颜色渐变的代码。 public class ...

    unity开发程序在一些必要的的程序的时候需要实现一些简单的渐变效果,之前不太懂都是直接让美术那边出图片用图片来代替,用着用着就让工程中多了很多没有必要的图片。后面找到了一种很好优化包的方法就是直接用代码来实现颜色的渐变。
    最开始在网上看到了一些设置颜色渐变的都是直接对整体进行颜色设置,后来无意间发现了每个字由6个顶点构成,然后就修改成了下面设置颜色渐变的代码。

     public class Gradient : BaseMeshEffect
        {
            /// <summary>
            /// 前的颜色
            /// </summary>
            public Color32 OneColor = Color.white;
            /// <summary>
            /// 后的颜色
            /// </summary>
            public Color32 TwoColor = Color.black;
            /// <summary>
            /// 设置颜色的方式
            /// </summary>
            public Whole m_Whole = Whole.Every;
            /// <summary>
            /// 设置文字的刷新类型
            /// </summary>
            public GradientType m_GradientType = GradientType.TopToDown;
    
            /// <summary>
            /// 每个字的顶点数
            /// </summary>
            private int m_Everyword = 6;
            /// <summary>
            /// 
            /// </summary>
            /// <param name="vh"></param>
            public override void ModifyMesh(VertexHelper vh)
            {
                if (!IsActive())
                {
                    return;
                }
                var vertexList = new List<UIVertex>();
                vh.GetUIVertexStream(vertexList);
                int count = vertexList.Count;
                if (count == 0)
                {
                    return;
                }
                ApplyGradient(vertexList, 0, count);
                vh.Clear();
                vh.AddUIVertexTriangleStream(vertexList);
            }
    
            private void ApplyGradient(List<UIVertex> vertexList, int start, int end)
            {
                Vector4 temp_Vector = new Vector4
                {
                    leftx = vertexList[0].position.x,
                    rightx = vertexList[0].position.x,
                    topy = vertexList[0].position.y,
                    bottomy = vertexList[0].position.y,
                };
    
    
    
                int idx = 0;
                for (int i = start; i < end; ++i)
                {
                    float y = vertexList[i].position.y;
                    float x = vertexList[i].position.x;
                    if (y > temp_Vector.bottomy)
                    {
                        temp_Vector.bottomy = y;
                    }
                    else if (y < temp_Vector.topy)
                    {
                        temp_Vector.topy = y;
                    }
                    if (x > temp_Vector.leftx)
                    {
                        temp_Vector.leftx = x;
                    }
                    else if (x < temp_Vector.rightx)
                    {
                        temp_Vector.rightx = x;
                    }
                    if (m_Whole == Whole.Every)
                    {
                        if ((i + 1) % m_Everyword == 0)
                        {
                            SettingEveryword(vertexList, temp_Vector, idx);
                            if (i != end - 1)
                            {
                                temp_Vector.topy = vertexList[i + 1].position.y;
                                temp_Vector.bottomy = vertexList[i + 1].position.y;
                                temp_Vector.leftx = vertexList[i + 1].position.x;
                                temp_Vector.rightx = vertexList[i + 1].position.x;
                            }
                            idx = i + 1;
                        }
                    }
                }
                if (m_Whole == Whole.Whole)
                {
                    SettingWholeWord(vertexList, temp_Vector, start, end);
                }
            }
            /// <summary>
            /// 设置每个字的颜色信息
            /// </summary>
            void SettingEveryword(List<UIVertex> vertexList,Vector4 vector,int idx)
            {
                for (int i = idx; i < idx + m_Everyword; i++)
                {
                    UIVertex uiVertex = vertexList[i];
                    vertexList[i] = SettingVertexColor(uiVertex, vector);
                }
            }
            /// <summary>
            /// 设置整体的颜色
            /// </summary>
            /// <param name="vertexList"></param>
            /// <param name="vector"></param>
            /// <param name="start">起点</param>
            /// <param name="end">终点</param>
            void SettingWholeWord(List<UIVertex> vertexList, Vector4 vector, int start, int end)
            {
                for (int i = start; i < end; ++i)
                {
                    UIVertex uiVertex = vertexList[i];
                    vertexList[i] = SettingVertexColor(uiVertex, vector);
                }
            }
            /// <summary>
            /// 设置顶点颜色
            /// </summary>
            /// <param name="uiVertex"></param>
            /// <param name="vector"></param>
            /// <returns></returns>
            private UIVertex SettingVertexColor(UIVertex uiVertex,Vector4 vector)
            {
                float uiElementHeight = Mathf.Abs(vector.topy - vector.bottomy);
                float uiElementWidth = Mathf.Abs(vector.leftx - vector.rightx);
                float temp_Value = 0;
                float temp_Width = 0;
                float temp_Hight = 0;
                switch (m_GradientType)
                {
                    case GradientType.TopToDown:
                        temp_Hight = Mathf.Abs(vector.bottomy - uiVertex.position.y);
                        temp_Value = uiElementHeight;
                        break;
                    case GradientType.DownToTop:
                        temp_Hight = Mathf.Abs(uiVertex.position.y - vector.topy);
                        temp_Value = uiElementHeight;
                        break;
                    case GradientType.LeftToRight:
                        temp_Width = Mathf.Abs(vector.rightx - uiVertex.position.x);
                        temp_Value = uiElementWidth;
                        break;
                    case GradientType.RightToLeft:
                        temp_Width = Mathf.Abs(uiVertex.position.x - vector.leftx);
                        temp_Value = uiElementWidth;
                        break;
                    case GradientType.LeftSlope:
                        temp_Width = Mathf.Abs(vector.rightx - uiVertex.position.x);
                        temp_Hight = Mathf.Abs(vector.bottomy - uiVertex.position.y);
                        temp_Value = uiElementHeight + uiElementWidth;
                        break;
                    case GradientType.RightSlope:
                        temp_Width = Mathf.Abs(uiVertex.position.x - vector.leftx);
                        temp_Hight = Mathf.Abs(vector.bottomy - uiVertex.position.y);
                        temp_Value = uiElementHeight + uiElementWidth;
                        break;
                }
                uiVertex.color = Color32.LerpUnclamped(OneColor, TwoColor, (temp_Width + temp_Hight) / temp_Value);
                return uiVertex;
            }
    
            /// <summary>
            /// 整体性
            /// </summary>
            public enum Whole
            {
                /// <summary>
                /// 单个字体
                /// </summary>
                Every,
                /// <summary>
                /// 整体
                /// </summary>
                Whole,
            }
            /// <summary>
            /// 渐变方向
            /// </summary>
            public enum GradientType
            {
                /// <summary>
                /// 上至下
                /// </summary>
                TopToDown,
                /// <summary>
                /// 下至上
                /// </summary>
                DownToTop,
                /// <summary>
                /// 左至右
                /// </summary>
                LeftToRight,
                /// <summary>
                /// 右至左
                /// </summary>
                RightToLeft,
                /// <summary>
                /// 左斜角
                /// </summary>
                LeftSlope,
                /// <summary>
                /// 右斜角
                /// </summary>
                RightSlope,
            }
            public struct Vector4
            {
                public float leftx;
                public float rightx;
                public float topy;
                public float bottomy;
            }
        }
     
    

    有一次无意间将该脚本挂载到了图片上,发现该颜色渐变对图片也是有效的,就是他不是覆盖图片的颜色,而是在图片的原有的颜色上进行颜色叠加。

    展开全文
  • unity 实现文本颜色的过度渐变,实现彩虹效果的艺术字.注意描边在加入脚本之后在加.
  • 在场景中创建一个Text组件,给Text组件拖一个脚本Sample_5.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening;...public class Sample_5 : ...

    DOTween官方文档

    插件在Unity的 Asset Store官网(外网,有时候打不开,多试几次,换个时间…)

    插件下载百度云
    链接:https://pan.baidu.com/s/1LRNtQFyQVSxHnyM8Z5xYPA
    提取码:ieb1

    导入插件后是这样的(我用的是Unity2018)
    在这里插入图片描述

    在场景中创建一个Text组件,给Text组件拖一个脚本Sample_5.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;
    public class Sample_5 : MonoBehaviour
    {
        private Text text;
    
        void Start()
        {
            text = GetComponent<Text>();
            text.DOText("欢迎来到王者荣耀", 4);//文字逐渐显示,时间4秒
            //下面可以分别执行测试
    //      text.DOFade(0, 4);//透明度从1渐变到0,阿尔法值 0~1(越小越透明),时间4秒
    //      text.DOColor(Color.red, 4);//颜色渐变到红色,时间4秒
        }
    }
    

    在这里插入图片描述

    展开全文
  • 图字:是指根据某些工具,将游戏中需要用到的文字渲染到一张纹理上,并附其纹理信息(包括 id值,尺寸,间距等)。 b.字库字:是指直接载入ttf等字库文件,根据从ttf文件中读取的数据,生成纹理并渲染。 (2)...
  • Unity中UGUI只为我们提供了最为基础的Image和RawImage两种可展示图片的组件,但是这两种组件要展示一些特殊效果的时候总是会依赖外界资源(PhotoShop资源),比如你想要一个简单的颜色渐变 ,变色的文字 都会...
  • unity3d ugui 文字背景色

    2016-03-16 20:03:37
    在项目中需要在文字后面显示一个背景,背景的大小要随文字的多少变动。 遍寻百度未曾获得解决办法,但是从momo的 UGUI研究院之Text文本渐变(十一)发现了继承BaseMeshEffect可以获取字符的网格信息于是使用了如下...
  • Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接 作者:15游02 丁祺 你好,这篇文档是我的导师孙老师(以下简称老孙)指名我 书写给新手、初学者以及技能有些许缺陷的人的一篇...
  • 今日在做项目中发现,很多时候需要对文字多特殊处理,渐变就是最常用的。 特别是文字特别多,还有动态的时候,就不能只靠图了,否则包的大小就吃不消了。 在网上搜到雨松写的渐变代码,于是就拿来用了。可是版本不...
  • 图字:是指根据某些工具,将游戏中需要用到的文字渲染到一张纹理上,并附其纹理信息(包括 id值,尺寸,间距等)。 b.字库字:是指直接载入ttf等字库文件,根据从ttf文件中读取的数据,生成纹理并渲染。 (2)...
  • Unity没有吗? 答:Unity肯定有自己的代替方案,只是性能看起来并没那么优越。Unity 的方案是挂载一个 OutLine 组件。 Outline outline inherit Shadow: 【Unity】Source Code: public class Outline : Shadow {...
  • // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) Shader "UI/AlphaFadeLeftRight" { Properties { [PerRendererData] _MainTex ("Sprit...
  • 使用代码控制NGUI的Label改变颜色有两种方法 1.直接在NGUI的Label的Text里面输入颜色RGB代码 点击Color Tint的Hex Color 就是对应RGBA,A是Alpha值 2.通过代码改变 如下所示,通过代码改变text也是可以实现的...
  • ... 一、字体图集与TTF字体 字体图集:将所用到的文字处理成一张图片进行使用,因为... TTF字体:直接使用TTF格式进行文字显示,非常主流的显示方式,电脑上的文字都是这样显示的 修改字体:选中文字,之后通过Insp...
  • Unity3D学习路线与学习经验分享 该博文出自作者15游02 丁祺,是一篇非常全面的Unity3D学习路线。作者通过不同切入点与角度,并根据以上人群的不同技术程度,由浅入深,分享了他的学习及工作经验。下面让我们进入主题...
  • 1.unity里面导入包时注意路径不要出现中文符号,否则出现 Error while importing package: Couldn't decompress package    2.NGUI中的Alignment参数 属性Justified(两端对齐的)在描述中文字时是不起效果的 ...
1 2 3 4 5 ... 13
收藏数 241
精华内容 96
关键字:

unity3d 文字颜色渐变