| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | using UnityEngine;using UnityEngine.UI;using System.Collections.Generic;[AddComponentMenu("UI/Effects/Nicer Outline", 15)]public class NicerOutline : BaseMeshEffect{    [SerializeField] private Color effectColor = new Color(0f, 0f, 0f, 1f);    [SerializeField] private float effectDistanceX = 2f;    [SerializeField] private float effectDistanceY = 2f;   [Range(4,12)] [SerializeField] private int samplingRate = 10;        private static readonly List<UIVertex> vertexList = new List<UIVertex>();    private static readonly List<UIVertex> tempVertexList = new List<UIVertex>();    public override void ModifyMesh(VertexHelper vh)    {        if (!IsActive()) return;        vertexList.Clear();        tempVertexList.Clear();        vh.GetUIVertexStream(vertexList);        int count = vertexList.Count;        for (int j = 0; j < samplingRate; j++)        {            for (int i = 0; i < count; i++)            {                UIVertex v = vertexList[i];                float angle = j * Mathf.PI * 2f / samplingRate;                Vector2 offset = new Vector2(Mathf.Cos(angle) * effectDistanceX, Mathf.Sin(angle) * effectDistanceY);                UIVertex outlinedVert = new UIVertex();                outlinedVert.position = v.position + (Vector3)offset;                outlinedVert.normal = v.normal;                outlinedVert.tangent = v.tangent;                outlinedVert.uv0 = v.uv0;                outlinedVert.uv1 = v.uv1;                outlinedVert.color = effectColor;                tempVertexList.Add(outlinedVert);            }        }        tempVertexList.AddRange(vertexList);        vh.Clear();        vh.AddUIVertexTriangleStream(tempVertexList);    }}
 |