用BaseMeshEffect实现的渐变
原理就是按点的位置占长宽的百分比算出颜色
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
/// <summary>
/// 渐变字体
/// </summary>
[AddComponentMenu("UI/Effects/Gradient")]
public class FontGradient : BaseMeshEffect
{
public Gradient useColor;
[Range(0,1)]
public float angle;
private RectTransform transImg
{
get
{
return transform as RectTransform;
}
}
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;
//var leftX = vertexs[0].position.x;
//var rightX = vertexs[0].position.x;
//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 x = vertexs[i].position.x;
// if (x > rightX)
// rightX = x;
// else if (x < leftX)
// leftX = x;
//}
var height = transImg.rect.height;
var width = transImg.rect.width;
//Vector2 center = new Vector2((leftX + rightX) * 0.5f, (bottomY + topY) * 0.5f);
for (var i = 0; i < count; i++)
{
var vertex = vertexs[i];
//if (usecenter)
//center = new Vector2(vertex.position.x * 0.5f, vertex.position.y * 0.5f);
//Vector2 a = new Vector2(vertex.position.x, vertex.position.y) - center;
//Vector2 r = new Vector2(Mathf.Sin((angle + 90) / 180 * Mathf.PI), Mathf.Cos((angle + 90) / 180 * Mathf.PI));
//float check = Vector2.Dot(a.normalized, r) * 0.5f + 0.5f;
//float x = Mathf.InverseLerp(leftX, rightX, vertex.position.x);
//float y = Mathf.InverseLerp(bottomY, topY, vertex.position.y);
float x = (vertex.position.x + width / 2) / width;
float y = (vertex.position.y + height / 2) / height;
float check = Mathf.Lerp(x, y, angle);
Color color = useColor.Evaluate(check);
vertex.color = graphic.color * color;
vh.SetUIVertex(vertex, i);
}
//NDebug.Log("check");
}
}
原文地址:https://www.cnblogs.com/mcyushao/p/15296675.html
- 代码分享系列(1)之感知机【代码可下载】
- C++课程设计类作业3
- [快学Python3]INI文件读写
- 【专知-PyTorch手把手深度学习教程08】NLP-PyTorch: 用字符级RNN生成名字
- Codeforces Round #415 (Div. 2)(A,暴力,B,贪心,排序)
- BZOJ 2456: mode(新生必做的水题)
- 【专知-PyTorch手把手深度学习教程07】NLP-基于字符级RNN的姓名分类
- Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
- 【专知-PyTorch手把手深度学习教程06】NLP-Word Embedding快速理解与PyTorch实现: 图文+代码
- [linux][memory]memcmp几种实现和性能对比
- 蒙特卡洛算法及其实现
- 【专知-PyTorch手把手深度学习教程05】Dropout快速理解与PyTorch实现: 图文+代码
- 【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 61.Vue 结合webpack使用vue-router
- 拨云见日:揭开ORA-00600:[4193]的神秘面纱
- AUCell | 识别单细胞对“基因集”的响应
- 未来十年,机器学习工程师会消失吗?
- Get了!用Python制作数据预测集成工具 | 附代码
- 定时任务最简单的3种实现方法(超好用)
- Swift:UICollectionReusableView xib创建报错
- echo-高性能,可扩展,极简的Go Web框架
- 小程序文字显示换行
- css Backgroud-clip (文字颜色渐变)
- 微信小程序 buton清除默认样式
- 正则replace 回调函数里接收的参数是什么?
- 微信小程序使用pako.js的踩坑笔记
- Koa - 初体验(写个接口)
- Koa - 中间件(理解中间件、实现一个验证token中间件)