1. 程式人生 > >UGUI之Shadow陰影元件

UGUI之Shadow陰影元件

基本屬性圖如下:
這裡寫圖片描述

1、Effect Color:陰影的顏色
2、Effect Distance:陰影的偏移距離
(1)x軸水平方向:當x=0時,陰影在水平方向上中間;當x>0時,陰影在右方;當x<0時,陰影在左方
(2)y軸垂直方向:當y=0時,陰影在垂直方向上中間;當y>0時,陰影在上方;當y<0時,陰影在下方
從上圖中可見其效果,另外從原始碼中可以看出x、y的範圍均為[-600,600],當然實際應用中這個範圍是絕對足夠用的
原始碼如下:

public Vector2 effectDistance
        {
            get
{ return m_EffectDistance; } set { if (value.x > 600) value.x = 600; if (value.x < -600) value.x = -600; if (value.y > 600) value.y = 600; if (value.y < -600
) value.y = -600; if (m_EffectDistance == value) return; m_EffectDistance = value; if (graphic != null) graphic.SetVerticesDirty(); } }

3、Use Graphic Alpha:是否使用Graphic中的Alpha透明度
(1)勾選:陰影的透明度會根據Graphic的透明度變化而變化
注意看下面兩個圖中的顏色Alpha值以及左邊的Text透明度變化
這裡寫圖片描述


圖一

這裡寫圖片描述
圖二

從以上可以看出勾選Use Graphic Alpha的效果
(2)不勾選:陰影的透明度不會根據Graphic的透明度變化而變化
在圖二的基礎上,去掉Use Graphic Alpha的勾選,結果如下:
這裡寫圖片描述
陰影部分透明度並沒有受到Graphic的影響
原始碼部分:
如果Use Graphic Alpha被勾選,m_UseGraphicAlpha為true,否則為false,從原始碼中可以如果m_UseGraphicAlpha為true,陰影的alpha經過了以下運算:newColor.a = (byte)((newColor.a * verts[i].color.a) / 255);

protected void ApplyShadowZeroAlloc(List<UIVertex> verts, Color32 color, int start, int end, float x, float y)
        {
            UIVertex vt;

            var neededCpacity = verts.Count * 2;
            if (verts.Capacity < neededCpacity)
                verts.Capacity = neededCpacity;

            for (int i = start; i < end; ++i)
            {
                vt = verts[i];
                verts.Add(vt);

                Vector3 v = vt.position;
                v.x += x;
                v.y += y;
                vt.position = v;
                var newColor = color;
                if (m_UseGraphicAlpha)
                    newColor.a = (byte)((newColor.a * verts[i].color.a) / 255);
                vt.color = newColor;
                verts[i] = vt;
            }
        }

以上為Shadow結合Text元件的使用介紹,下面看一下Shadow結合Image元件的使用:
這裡寫圖片描述

這裡不再過多介紹,大家有興趣,可以深入研究原始碼。

另外,使用Shadow會導致頂點數翻倍:

這裡寫圖片描述

以上知識分享,如有錯誤,歡迎指出,共同學習,共同進步。