基于unity3d实现渐变颜色的简单脚本,代码很少,就不废话了,直接上代码和效果图。
效果图:
using system; using system.collections.generic; using unityengine; using unityengine.ui; namespace extrafoundation.components { [addcomponentmenu("ui/effects/gradient")] public class uigradient : basemesheffect { #region public declarations public enum type { vertical, horizontal } #endregion #region public properties public type gradienttype = type.vertical; [range(-1f, 1f)] public float offset = 0f; public gradient gradient; #endregion #region public methods public override void modifymesh(vertexhelper helper) { if (!isactive() || helper.currentvertcount == 0) { return; } vertexlist.clear(); helper.getuivertexstream(vertexlist); int ncount = vertexlist.count; switch (gradienttype) { case type.vertical: { float fbottomy = vertexlist[0].position.y; float ftopy = vertexlist[0].position.y; float fypos = 0f; for (int i = ncount - 1; i >= 1; --i) { fypos = vertexlist[i].position.y; if (fypos > ftopy) ftopy = fypos; else if (fypos < fbottomy) fbottomy = fypos; } float fuielementheight = 1f / (ftopy - fbottomy); uivertex v = new uivertex(); for (int i = 0; i < helper.currentvertcount; i++) { helper.populateuivertex(ref v, i); v.color = gradient.evaluate((v.position.y - fbottomy) * fuielementheight - offset); helper.setuivertex(v, i); } } break; case type.horizontal: { float fleftx = vertexlist[0].position.x; float frightx = vertexlist[0].position.x; float fxpos = 0f; for (int i = ncount - 1; i >= 1; --i) { fxpos = vertexlist[i].position.x; if (fxpos > frightx) frightx = fxpos; else if (fxpos < fleftx) fleftx = fxpos; } float fuielementwidth = 1f / (frightx - fleftx); uivertex v = new uivertex(); for (int i = 0; i < helper.currentvertcount; i++) { helper.populateuivertex(ref v, i); v.color = gradient.evaluate((v.position.x - fleftx) * fuielementwidth - offset); helper.setuivertex(v, i); } } break; default: break; } } #endregion #region internal fields private list<uivertex> vertexlist = new list<uivertex>(); #endregion } }
虽然支持的内容不多,但是小而精,希望对大家有用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论