UGUI研究院之Text文本渐变(十一)

来源:互联网 发布:农村淘宝服务费如何扣 编辑:程序博客网 时间:2024/06/12 00:07

这是我无意间逛国外论坛发现的,感觉还可以就分享给大家。原文 http://pastebin.com/dJabCfWn
这里写图片描述

如下图所示,用法和UGUI自带的outline和shadow一样,可以同时使用。
这里写图片描述

代码在这里了。我加了个判断,它原来的有越界的隐患。

using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEngine.UI;[AddComponentMenu("UI/Effects/Gradient")]public class Gradient : BaseVertexEffect {    [SerializeField]    private Color32 topColor = Color.white;    [SerializeField]    private Color32 bottomColor = Color.black;    public override void ModifyVertices(List<UIVertex> vertexList) {        if (!IsActive()) {            return;        }        int count = vertexList.Count;        if(count>0){            float bottomY = vertexList[0].position.y;            float topY = vertexList[0].position.y;            for (int i = 1; i < count; i++) {                float y = vertexList[i].position.y;                if (y > topY) {                    topY = y;                }                else if (y < bottomY) {                    bottomY = y;                }            }            float uiElementHeight = topY - bottomY;            for (int i = 0; i < count; i++) {                UIVertex uiVertex = vertexList[i];                uiVertex.color = Color32.Lerp(bottomColor, topColor, (uiVertex.position.y - bottomY) / uiElementHeight);                vertexList[i] = uiVertex;            }        }    }}

我也在测试中,欢迎大家提意见。

如果你的项目升级到了5.2 请使用下面的代码,感谢代码的提供者。@獨立遊戲開發熊

using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEngine.UI;[AddComponentMenu("UI/Effects/Gradient")]public class Gradient :  BaseMeshEffect{    [SerializeField]    private Color32        topColor = Color.white;    [SerializeField]    private Color32        bottomColor = Color.black;    public override void ModifyMesh (Mesh mesh)    {        if (!IsActive ()) {            return;        }        Vector3[] vertexList = mesh.vertices;        int count = mesh.vertexCount;        if (count > 0) {            float bottomY = vertexList [0].y;            float topY = vertexList [0].y;            for (int i = 1; i < count; i++) {                float y = vertexList [i].y;                if (y > topY) {                    topY = y;                } else if (y < bottomY) {                    bottomY = y;                }            }            List<Color32> colors = new List<Color32> ();            float uiElementHeight = topY - bottomY;            for (int i = 0; i < count; i++) {                colors.Add (Color32.Lerp (bottomColor, topColor, (vertexList [i].y - bottomY) / uiElementHeight));            }            mesh.SetColors (colors);        }    }}

本文固定链接: http://www.xuanyusong.com/archives/3471
转载请注明: 雨松MOMO 2015年05月08日 于 雨松MOMO程序研究院 发表

转by:蒋志杰

原创粉丝点击