今天有人和我说渐变的label,我觉得不错,就简单写了一下。
NGUI版本v3.0以上。(3.0.6已经内置这个功能了)
Monobehaviour SZUIGridientLabel:
using UnityEngine;
using System.Collections;
public class SZUIGridientLabel : UILabel
{
public Color colorUp = Color.white;
public Color colorDown = Color.white;
public override void OnFill (BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)
{
int start = verts.size;
base.OnFill (verts, uvs, cols);
int length = verts.size - start;
int end = verts.size;
switch (effectStyle) {
case UILabel.Effect.Outline:
{
length /= 5;
}
break;
case UILabel.Effect.Shadow:
{
length /= 2;
}
break;
}
Color32 colUp = CalculateColor (colorUp);
Color32 colDown = CalculateColor (colorDown);
int index = 0;
for (int i = end-length; i < end; ++i, index = (++index)%4) {
cols.buffer [i] = index > 1 ? colUp : colDown;
}
}
private Color32 CalculateColor (Color co)
{
Color c = co;
c.a *= alpha * mPanel.alpha;
Color32 col = bitmapFont != null ? ((bitmapFont.premultipliedAlpha) ? NGUITools.ApplyPMA (c) : c) : c;
return col;
}
}
编辑类SZUIGridientLabelInspector:
using UnityEngine;
using UnityEditor;
using System;
/// <summary>
/// Inspector class used to edit SZUIGridientLabels.
/// </summary>
[CustomEditor(typeof(SZUIGridientLabel))]
public class SZUIGridientLabelInspector : UILabelInspector
{
SZUIGridientLabel mGridientLabel;
void RegisterUndo () { NGUIEditorTools.RegisterUndo("GridientLabel Change", mGridientLabel); }
protected override bool DrawProperties ()
{
mGridientLabel = mWidget as SZUIGridientLabel;
bool result = base.DrawProperties();
Color c = EditorGUILayout.ColorField("Color Up", mGridientLabel.colorUp);
if (mGridientLabel.colorUp != c) { RegisterUndo(); mGridientLabel.colorUp = c; mGridientLabel.MarkAsChangedLite(); }
c = EditorGUILayout.ColorField("Color Down", mGridientLabel.colorDown);
if (mGridientLabel.colorDown != c) { RegisterUndo(); mGridientLabel.colorDown = c; mGridientLabel.MarkAsChangedLite(); }
return result;
}
}