您的位置:首页 > 产品设计 > UI/UE

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

2016-05-13 09:38 621 查看
这是我无意间逛国外论坛发现的,感觉还可以就分享给大家。原文 http://pastebin.com/dJabCfWn





如下图所示,用法和UGUI自带的outline和shadow一样,可以同时使用。





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

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

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 请使用下面的代码,感谢代码的提供者。@獨立遊戲開發熊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

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);

}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: