using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;

[AddComponentMenu("UI/Effects/Gradient")]
[RequireComponent(typeof(Text))]
public class Gradient : BaseMeshEffect
{
public Color colorTop = Color.white;
public Color colorCenter = Color.grey;
public Color colorBottom = Color.black;

public bool MultiplyTextColor = false;

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
}

Text文件颜色渐变的更多相关文章

  1. 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)

    考虑一下,如何在网页中达到类似以下文字渐变的效果? 传统的实现中,是用一副透明渐变的图片覆盖在文字上.具体实现方式可参考 http://www.qianduan.net/css-gradient-te ...

  2. iOS 动画绘制线条颜色渐变的折线图

    效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...

  3. css3的背景颜色渐变@线性渐变

    背景颜色渐变之线性渐变 语法形式: firefox浏览器 background:-moz-linear-gradient(position/deg,startColor,endColor); oper ...

  4. 颜色渐变的JS代码

    今天做组织机构,要分级别显示颜色,自己计算半天也没算出颜色渐变的方法,出来总是花里胡哨的难看的不要不要的,所以查了一下,找到一个js代码,试了试,很完美哦! <!DOCTYPE html> ...

  5. android Button 切换背景,实现动态按钮和按钮颜色渐变

        android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变     1.右键单击项目->new->Oth ...

  6. CAGradientLayer颜色渐变器

    使用CAGradientLayer可以实现颜色的渐变, 我们先看下头文件 @interface CAGradientLayer : CALayer @property(nullable, copy) ...

  7. Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)

    Android特效专辑(二)--ViewPager渲染背景颜色渐变(引导页) 首页:http://blog.csdn.net/qq_26787115/article/details/50439020 ...

  8. jQuery 小特效【文本框折叠隐藏,展开显示】【下拉菜单】【颜色渐变】【弹窗+遮罩】

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  9. 一款纯css3实现的颜色渐变按钮

    之前为大家分享了推荐10款纯css3实现的实用按钮,今天给大家带来一款纯css3实现的颜色渐变按钮.这款按钮的边框和文字的颜色通过css3实现两种颜色的渐变,效果非常好看,一起看下效果图: 在线预览  ...

  10. 第四界css大会 黑魔法-css网格背景、颜色拾取器、遮罩、文字颜色渐变、标题溢出渐变等

    1.css网格背景 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

随机推荐

  1. vue指令入门

    1.  vue属性.事件.内容绑定 1 <div id="dv"> 2 <!-- v-cloak能够解决表达式闪烁问题 3 (当网速较慢时,会先出现{{msg}} ...

  2. 【转载】C++标准库容器与C#容器对比

    转载自栈他喵的又溢出了 我简单的整理一下,方便观看: C#容器 C++容器 备注 Array C array .net的Array可以是非0起始索引(鸡肋?查了一下,用Array.CreateInst ...

  3. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(中)

    以C语言方式驱动(例程与代码分析) 韦东山的例程: start.s部分: .text .global _start @全局标号 _start: //设置栈 ldr sp,=0x80200000 @设置 ...

  4. go 语言操作es示例

    使用高度封装的 orm 查询 package main import ( "context" "fmt" "log" "os&qu ...

  5. PyTorch Live get started from Windows

    〇. PyTorch Live https://pytorch.org/live/docs/tutorials/get-started-manually/ 以下 命令 建议都用 以管理员身份运行的 P ...

  6. 日志服务化&可视化&统计化

    概述: ELK是Elasticsearch(简称es).Logstash.Kibana的简称,这三者是核心套件,但并非全部. Filebeat 日志采集工具  Logstash数据处理引擎   ela ...

  7. matlab读写文件操作

    文件相对路径 在编码中尽可能使用相对路径: 1.当前路径下,直接:' xxx.bin ' 2.在下一级路径下,使用:' .\下一级路径文件名\xxx.bin ' 3.在上一级路径下,使用:' ..\x ...

  8. 计算机科学导论-第三版-学习笔记-chapter1-绪论

    小测验的网站找不到,小程序也找不到,这两个部分的习题就不做了. Cengage Learning - Foundations of Computer Science这上面有部分答案.这里用斜体标出.我 ...

  9. Element--->>>最新骨架屏Skeleton使用

    首先,Element在最近的一次更新中(时间:2021-06-29) 新增了Skeleton骨架屏组件.Empty空状态组件. 那么在使用其自带组件Skeleton时,应将按照如下步骤使用: Ⅰ:如果 ...

  10. startActivity 新开一个Activity

    private void startActivity(Intent intent) { Context ctx = ApplicationController.getTopActivity(); if ...