using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; public class BoxOutline : ModifiedShadow { const int maxHalfSampleCount = 20; [SerializeField] [Range(1, maxHalfSampleCount)] int m_halfSampleCountX = 1; [SerializeField] [Range(1, maxHalfSampleCount)] int m_halfSampleCountY = 1; public int halfSampleCountX { get { return m_halfSampleCountX; } set { m_halfSampleCountX = Mathf.Clamp(value, 1, maxHalfSampleCount); if (graphic != null) graphic.SetVerticesDirty(); } } public int halfSampleCountY { get { return m_halfSampleCountY; } set { m_halfSampleCountY = Mathf.Clamp(value, 1, maxHalfSampleCount); if (graphic != null) graphic.SetVerticesDirty(); } } public override void ModifyVertices(List verts) { if (!IsActive()) return; var neededCapacity = verts.Count * (m_halfSampleCountX * 2 + 1) * (m_halfSampleCountY * 2 + 1); if (verts.Capacity < neededCapacity) verts.Capacity = neededCapacity; var original = verts.Count; var count = 0; var dx = effectDistance.x / m_halfSampleCountX; var dy = effectDistance.y / m_halfSampleCountY; for (int x = -m_halfSampleCountX; x <= m_halfSampleCountX; x++) { for (int y = -m_halfSampleCountY; y <= m_halfSampleCountY; y++) { if (!(x == 0 && y == 0)) { var next = count + original; ApplyShadow(verts, effectColor, count, next, dx * x, dy * y); count = next; } } } } }