Unity Image transparency gradient

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Newtonsoft.Json;
using UnityEditor;
using UnityEditor.UI;

//Transparency gradient method
public enum FadeMode
{     LeftTORight,     UpToDown,     LeftUpTORightDown,     LeftDownTORightUp, }




namespace UnityEngine.UI
{
    public class ImageFade : Image
    {

        public FadeMode FadeMode;
        public byte FadeStartAlpha = 0;
        public byte FadeEndAlpha = 255;
      // public override void SetVerticesDirty ()
        // {        // / base.SetVerticesDirty ();       //}

        protected override void OnPopulateMesh(VertexHelper toFill)
        {
            base.OnPopulateMesh(toFill);
            UIVertex vertex = new UIVertex();
            //print($"toFill.currentVertCount={toFill.currentIndexCount},toFill.currentVertCount={toFill.currentVertCount}");
            for (int i = 0; i < toFill.currentVertCount; i++)
            {
                toFill.PopulateUIVertex(ref vertex, i);
                // print($"vertex[{i}] Position={vertex.position}");
                // print($"vertex[{i}] Color={vertex.color}");

                if (FadeMode == FadeMode.UpToDown)
                {
                    if (i == 0 || i == 3)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeStartAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                    else
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeEndAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                }
                else if (FadeMode == FadeMode.LeftTORight)
                {
                    if (i == 0 || i == 1)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeStartAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                    else
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeEndAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                }
                else if (FadeMode == FadeMode.LeftDownTORightUp)
                {
                    if (i == 0)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeStartAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                    else if (i == 1 || i == 3)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, (byte)((FadeEndAlpha + FadeStartAlpha) / 2));
                        toFill.SetUIVertex(vertex, i);
                    }
                    else
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeEndAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                }
                else if (FadeMode == FadeMode.LeftUpTORightDown)
                {
                    if (i == 1)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeStartAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                    else if (i == 0 || i == 2)
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, (byte)((FadeEndAlpha + FadeStartAlpha) / 2));
                        toFill.SetUIVertex(vertex, i);
                    }
                    else
                    {
                        vertex.color = new Color32(vertex.color.r, vertex.color.g, vertex.color.b, FadeEndAlpha);
                        toFill.SetUIVertex(vertex, i);
                    }
                }


            }

        }
    }


}


//https://www.jianshu.com/p/035242c078c5?utm_campaign 
//https://blog.csdn.net/duzixi/article/details/78013295
//The only function to display public fields but there are fields you don't want
[CustomEditor(typeof(ImageFade))]
public class ImageFadeEditor: ImageEditor
{     protected SerializedProperty FadeMode;     protected SerializedProperty FadeStartAlpha;     protected SerializedProperty FadeEndAlpha;


    //https://blog.csdn.net/weixin_30360497/article/details/98998280
    protected override void OnEnable()
    {
        base.OnEnable();
        FadeMode = serializedObject.FindProperty("FadeMode");//得到类属性
        FadeStartAlpha = serializedObject.FindProperty("FadeStartAlpha");
        FadeEndAlpha = serializedObject.FindProperty("FadeEndAlpha");
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        serializedObject.Update();//更新序列化信息
        EditorGUILayout.PropertyField(FadeMode);
        EditorGUILayout.PropertyField(FadeStartAlpha);
        EditorGUILayout.PropertyField(FadeEndAlpha);

        serializedObject.ApplyModifiedProperties();//Apply property changes
    }

}
 

Guess you like

Origin blog.csdn.net/weixin_41995872/article/details/110120259