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设置字体颜色渐变相关推荐

  1. css怎么设置字体颜色渐变

    css设置字体颜色渐变的方法:1.使用"background-cli"和"text-fill-color"实现字体颜色渐变:2.使用"mask-ima ...

  2. css设置字体颜色渐变

    /* 字体颜色渐变 */ color: #86c9f4; background: -webkit-linear-gradient(90deg, #f3fbfe, #86c9f4); -webkit-b ...

  3. html字体渐变颜色的设置颜色代码,使用CSS3实现字体颜色渐变的实现

    在使用Animation.css的时候发现它的官网字体会渐变,看了一下他的css很有趣 .site__title { color: #f35626; background-image: -webkit ...

  4. android TextView设置字体颜色

    今天,简单讲讲如何设置TextView的字体颜色. 其实很简单,不过之前忘记了,所以还是记录,总结一下. TextView的字体设置方法: 1.直接通过配置文件设置 2.在Activity类中进行设置 ...

  5. HTML设置字体颜色1008无标题,如何在HTML中设置字体颜色,你知道这几种方式吗?...

    color设置字体颜色 在color设置字体颜色之前,我们首先了解color在css中有几种取值方式,一共有4种方式,若有不全还请在评论区告知谢谢,4种方式如下: 十六进制.十进制. 英文单词.十六进 ...

  6. Outlook2016未读邮件怎么设置字体颜色

    Outlook2016中想要设置未读邮件的字体颜色,该怎么设置呢?下面我们就来看看详细的教程. Outlook2016未读邮件怎么设置字体颜色? 1.下载安装outlook软件. Outlook201 ...

  7. css设置字体颜色、文本对齐方式、首行缩进、文本装饰、列表样式、鼠标样式、禁止文本域拖拽、轮廓线、块级元素对齐方式、文字溢出设置

    color:设置字体颜色: 取值方式有:1.颜色值red,green等 .2.十六进制#FF0000,#FF2313等.3.RGB代码rgb(225,225,112)或rgb(100%,55%,0%) ...

  8. 设计师妹子问:字体颜色渐变,你能实现?

    早上设计师妹子把设计稿交付过来,乍一看,上面的文字颜色渐变的,而且文字内容是动态的,也就是我们无法用图片来代替. 作为一个有责任担当的汉子,坚决不能说不行. 想起了CSS3 擅长做颜色渐变.所以赶紧查 ...

  9. Qt - QLabel设置字体颜色

    ** Qt - QLabel设置字体颜色 ** • 第一种,使用setPalette()方法如下: QLabel *label = new QLabel(tr("Hello Qt!" ...

最新文章

  1. 清华大学大数据研究中心“RONG”奖学金申请通知
  2. spring源码研究
  3. 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
  4. wxWidgets:拖放概述
  5. docker与mmdetection
  6. UNIX(多线程):19---Future 类型详解
  7. python安装matplotlib需要c编译_在Python 3.9上安装matplotlib提示需要FreeType更高版本的解决...
  8. GlobalAuthenticationConfigurerAdapter.class 整合activiti 报错
  9. 如何清空_回收站删除的文件怎么恢复?回收站清空如何恢复?
  10. python图片矢量化_图像处理tas的Python矢量化
  11. lbochs模拟器最新版_bochs模拟器最新版下载
  12. 申请数据库资源池的三种方式(Map,properties)
  13. 优秀的云计算工程师需要学什么?云计算Docker学习路线
  14. 扎根黄金赛道,尚未盈利的捍宇医疗如何遨游行业蓝海?
  15. openresty php 环境,从零搭建php环境-openresty
  16. Hadoop集群搭 Hadoop分布式文件系统架构和设计
  17. 计算机编程那个好学点,计算机编程好学吗?
  18. python 常用的几种定位方式
  19. Kibana KQL查询语法
  20. json对象的遍历(C++)

热门文章

  1. python里写中文出现 “SyntaxError: Non-ASCII character... but no encoding declared”解决方法
  2. 优秀网页翻译:高精度 10MHz GPS 驯服钟 (GPSDO) - Part 5
  3. xshell进入管理员模式
  4. 前端如何实现即时通信?
  5. 深度学习 - 开发平台
  6. 电脑服务器修改穿越火线不卡,windows10玩穿越火线画面不流畅怎么办
  7. 计算机调整亮度是哪个好,电脑屏幕亮度怎么调 电脑屏幕亮度怎么调对眼睛最好...
  8. @OneToMany---ManyToOne
  9. 液晶显示屏的C语言编码,AT89C51单片机驱动液晶显示汉字C语言
  10. Kotlin第三章:AndroidUI简介