using UnityEngine; using UnityEngine.UI; using UnityEngine.Sprites; [RequireComponent(typeof(CanvasRenderer))] public class CustomBorder : MaskableGraphic { // 边框的厚度 public float borderThickness = 5.0f; // 边框的颜色 public Color borderColor = Color.black; protected override void Start() { base.Start(); // 确保边框颜色使用图像模式 //colorGradient = new ColorBlock { normal = borderColor }; } protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); Rect rect = rectTransform.rect; Vector2 bottomLeft = new Vector2(rect.x, rect.y); Vector2 topRight = new Vector2(rect.xMax, rect.yMax); // 边框的四个顶点 var v1 = new Vector2(bottomLeft.x, bottomLeft.y - borderThickness); var v2 = new Vector2(bottomLeft.x, topRight.y + borderThickness); var v3 = new Vector2(topRight.x + borderThickness, topRight.y); var v4 = new Vector2(topRight.x - borderThickness, bottomLeft.y); vh.AddUIVertexQuad(GetQuad(v1, v2, v3, v4)); } private UIVertex[] GetQuad(Vector2 v1, Vector2 v2, Vector2 v3, Vector2 v4) { UIVertex[] vertexs = new UIVertex[4]; vertexs[0] = new UIVertex(); vertexs[0].position = v1; vertexs[1] = new UIVertex(); vertexs[1].position = v2; vertexs[2] = new UIVertex(); vertexs[2].position = v3; vertexs[3] = new UIVertex(); vertexs[3].position = v4; return vertexs; } }