UGUI之Shadow阴影组件

博客迁移

个人博客站点,欢迎访问,www.jiingfengji.tech

正文

基本属性图如下:
这里写图片描述

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会导致顶点数翻倍:

这里写图片描述

以上知识分享,如有错误,欢迎指出,共同学习,共同进步。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页