用BaseMeshEffect实现的渐变

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了用BaseMeshEffect实现的渐变脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原理就是按点的位置占长的百分比算出颜色

using UnityEngine;using System.Collections;using System.Collections.Generic;using UnITyEngine.UI;using System;/// <summary>/// 渐变字体/// </summary>[Add@R_777_480@Menu("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"); }}

脚本宝典总结

以上是脚本宝典为你收集整理的用BaseMeshEffect实现的渐变全部内容,希望文章能够帮你解决用BaseMeshEffect实现的渐变所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。